JavaScript Array.prototype 内置对象 (一)
concat()、copyWithIn()、entries()、every()、fill()、filter()…
1、concat()
concat() 方法用于合并两个或多个数组。此方法不会更改现有数组,而是返回一个新数组。
语法:
concat()
concat(value0)
concat(value0, value1)
concat(value0, value1, /* … ,*/ valueN)
举例:
# 合并两个数组
const letters = ["a", "b", "c"];
const numbers = [1, 2, 3];
const alphaNumeric = letters.concat(numbers);
console.log(alphaNumeric);
// results in ['a', 'b', 'c', 1, 2, 3]
2、copyWithin()
copyWithin() 方法浅复制数组的一部分到同一数组中的另一个位置,并返回它,不会改变原数组的长度。
语法:
copyWithin(target)
copyWithin(target, start)
copyWithin(target, start, end)
target:序列开始替换的目标位置,以 0 为起始的下标表示,且将被转换为整数
start:要复制的元素序列的起始位置,以 0 为起始的下标表示,且将被转换为整数
end:要复制的元素序列的结束位置,以 0 为起始的下标表示,且将被转换为整数。copyWithin 将会拷贝到该位置,但不包括 end 这个位置的元素。
举例:
console.log([1, 2, 3, 4, 5].copyWithin(-2)); // [1, 2, 3, 1, 2]
console.log([1, 2, 3, 4, 5].copyWithin(0, 3)); // [4, 5, 3, 4, 5]
console.log([1, 2, 3, 4, 5].copyWithin(0, 3, 4)); // [4, 2, 3, 4, 5]
console.log([1, 2, 3, 4, 5].copyWithin(-2, -3, -1)); // [1, 2, 3, 3, 4]
3、entries()、keys() 、values()
entries() 方法返回一个新的数组迭代器 (en-US)对象,该对象包含数组中每个索引的键/值对。
keys():方法返回一个新的数组迭代器 (en-US)对象,其中包含数组中每个索引的键。
values() :方法返回一个新的数组迭代器 (en-US)对象,该对象迭代数组中每个元素的值。
举例:
#entries()
const array1 = ['a', 'b', 'c'];
const iterator = array1.entries(); // 遍历数组,返回键值对
#values()
const array1 = ['a', 'b', 'c'];
const iterator = array1.values(); // 遍历数组,返回键
# keys()
const array1 = ['a', 'b', 'c'];
const iterator = array1.keys(); //遍历数组,返回值
4、every()
every() 方法测试一个数组内的所有元素是否都能通过指定函数的测试。它返回一个布尔值,它是一个迭代方法。
语法:
every(callbackFn)
every(callbackFn, thisArg) //等同于 every((element,index,array)=>{},thisArg)
举例:检查一个数组是否是另一个数组的子集
const isSubset = (array1, array2) =>
array2.every((element) => array1.includes(element));
console.log(isSubset([1, 2, 3, 4, 5, 6, 7], [5, 7, 6])); // true
console.log(isSubset([1, 2, 3, 4, 5, 6, 7], [5, 8, 7])); // false
5、fill()
fill() 方法用一个固定值填充一个数组中从起始索引(默认为 0)到终止索引(默认为 array.length)内的全部元素。它返回修改后的数组。
fill() 是个修改方法,不会改变 this 的长度,但会改变 this 的内容。
语法:
fill(value) // start,end 省略,将从0开始,array.length 结束
fill(value, start)
fill(value, start, end)
参数 value: 用来填充数组元素的值。注意所有数组中的元素都将是这个确定的值:如果 value 是个对象,那么数组的每一项都会引用这个元素。
举例:
console.log([1, 2, 3].fill(4)); // [4, 4, 4]
console.log([1, 2, 3].fill(4, 1)); // [1, 4, 4]
console.log([1, 2, 3].fill(4, 1, 2)); // [1, 4, 3]
console.log([1, 2, 3].fill(4, 1, 1)); // [1, 2, 3]
console.log([1, 2, 3].fill(4, 3, 3)); // [1, 2, 3]
console.log([1, 2, 3].fill(4, -3, -2)); // [4, 2, 3]
console.log([1, 2, 3].fill(4, NaN, NaN)); // [1, 2, 3]
console.log([1, 2, 3].fill(4, 3, 5)); // [1, 2, 3]
console.log(Array(3).fill(4)); // [4, 4, 4]
// 一个简单的对象,被数组的每个空槽所引用
const arr = Array(3).fill({}); // [{}, {}, {}]
arr[0].hi = "hi"; // [{ hi: "hi" }, { hi: "hi" }, { hi: "hi" }]
6、filter()
filter() 方法创建给定数组一部分的浅拷贝,其包含通过所提供函数实现的测试的所有元素。
语法:同 every() 方法,意义不同
filter(callbackFn)
filter(callbackFn, thisArg)
举例:筛选排除所有较小的值
function isBigEnough(value) {
return value >= 10;
}
const filtered = [12, 5, 8, 130, 44].filter(isBigEnough);
// filtered is [12, 130, 44]