Array
创建
var fruits = ['Apple', 'Banana'];
console.log(fruits.length); // 2
遍历 forEach
fruits.forEach(function(item, index, array) {
console.log(item, index);
});
// Apple 0
// Banana 1
fill
语法:
arr.fill(value)
arr.fill(value, start)
arr.fill(value, start, end)
参数 start:开始下标,默认为0 参数 end:结束下标,默认为this.length
返回修改之后的数组
var numbers = [1, 2, 3]
numbers.fill(1);
// results in [1, 1, 1]
pop
移除最后一个元素,然后返回那个元素
push
添加一个或者多个元素至末尾,然后返回这个数组的新长度
reverse
翻转数组,返回翻转后的数组
shift
移除第一个元素,然后返回被移除的元素
sort
对元素进行排序,然后返回排序后的数组
splice
语法:
array.splice(start)
array.splice(start, deleteCount)
array.splice(start, deleteCount, item1, item2, ...)
Remove 0 elements from index 2, and insert "drum":
var myFish = ['angel', 'clown', 'mandarin', 'sturgeon'];
var removed = myFish.splice(2, 0, 'drum');
// myFish is ["angel", "clown", "drum", "mandarin", "sturgeon"]
// removed is [], no elements removed
Remove 1 element from index 3:
var myFish = ['angel', 'clown', 'drum', 'mandarin', 'sturgeon'];
var removed = myFish.splice(3, 1);
// removed is ["mandarin"]
// myFish is ["angel", "clown", "drum", "sturgeon"]
Remove 1 element from index 2, and insert "trumpet":
var myFish = ['angel', 'clown', 'drum', 'sturgeon'];
var removed = myFish.splice(2, 1, 'trumpet');
// myFish is ["angel", "clown", "trumpet", "sturgeon"]
// removed is ["drum"]
从数组中添加/删除元素,返回一个包含所有被删除元素的数组
unshift
添加一个或者多个元素至数组的开始,然后返回新长度
var a = [1, 2, 3];
a.unshift(4, 5);
console.log(a); // [4, 5, 1, 2, 3]
concat
var arr1 = ['a', 'b', 'c'];
var arr2 = ['d', 'e', 'f'];
var arr3 = arr1.concat(arr2);
// results in a new array [ "a", "b", "c", "d", "e", "f" ]
slice
返回一份浅复制:
var a = ['zero', 'one', 'two', 'three'];
var sliced = a.slice(1, 3);
console.log(a); // ['zero', 'one', 'two', 'three']
console.log(sliced); // ['one', 'two']
document.querySelectorAll
返回所有匹配的 Element
组成的 NodeList
。它可以通过 [].slice.call()
把它转成 Array
join
使用字符将数组元素拼接成一个字符串:
var a = ['Wind', 'Rain', 'Fire'];
a.join(); // 'Wind,Rain,Fire'
a.join('-'); // 'Wind-Rain-Fire'
filter
查找兄弟节点:
// jQuery
$el.siblings();
// Native
[].filter.call(el.parentNode.children, function(child) {
return child !== el;
});
indexOf
得到元素的下表值:
// jQuery
$(e.currentTarget).index('.radio');
// Native
[].indexOf.call(document.querySelectorAll('.radio'), e.currentTarget);
every
检查数组里面的每一个元素是否满足指定的布尔表达式:
function isBigEnough(element, index, array) {
return element >= 10;
}
[12, 5, 8, 130, 44].every(isBigEnough); // false
[12, 54, 18, 130, 44].every(isBigEnough); // true
使用ES6
的Arrow Functions
:
[12, 5, 8, 130, 44].every(x => x >= 10); // false
[12, 54, 18, 130, 44].every(x => x >= 10); // true
some
是否至少有一个元素满足测试函数:
function isBiggerThan10(element, index, array) {
return element > 10;
}
[2, 5, 8, 1, 4].some(isBiggerThan10); // false
[12, 5, 8, 1, 4].some(isBiggerThan10); // true
使用arrow functions:
[2, 5, 8, 1, 4].some(x => x > 10); // false
[12, 5, 8, 1, 4].some(x => x > 10); // true
filter
创建一个新的数组,包含通过筛选函数测试的值:
function isBigEnough(value) {
return value >= 10;
}
var filtered = [12, 5, 8, 130, 44].filter(isBigEnough);
// filtered is [12, 130, 44]
map
创建一个新的数组,每一个元素都调用指定的函数
var numbers = [1, 5, 10, 15];
var roots = numbers.map(function(x) {
return x * 2;
});
// roots is now [2, 10, 20, 30]
// numbers is still [1, 5, 10, 15]
var numbers = [1, 4, 9];
var roots = numbers.map(Math.sqrt);
// roots is now [1, 2, 3]
// numbers is still [1, 4, 9]
reduce
从左到右,一个数字和右边相邻的数组执行reduce里面的函数,最后把这个结果返回:
var sum = [0, 1, 2, 3].reduce(function(acc, val) {
return acc + val;
}, 0);
// sum is 6
var list1 = [[0, 1], [2, 3], [4, 5]];
var list2 = [0, [1, [2, [3, [4, [5]]]]]];
const flatten = arr => arr.reduce((acc, val) => acc.concat(Array.isArray(val) ? flatten(val) : val), []);
flatten(list1); // returns [0, 1, 2, 3, 4, 5]
flatten(list2); // returns [0, 1, 2, 3, 4, 5]