数组的常用方法
concat() 方法 合并两个或多个数组,不会改变原数组,返回一个新数组
返回一个浅拷贝,如果数组中包含对象,原始数组与新数组都引用相同的对象;
concat可以将字符串和数字的值复制到新数组中
var new_array = old_array.concat(value1[, value2[, ...[, valueN]]])
// 将值连接到数组中
var alpha = ['a', 'b', 'c'];
var alphaNumeric = alpha.concat(1, [2, 3]);
console.log(alphaNumeric);
// results in ['a', 'b', 'c', 1, 2, 3]
// 合并嵌套数组
var num1 = [[1]];
var num2 = [2, [3]];
var nums = num1.concat(num2);
console.log(nums);
// results in [[1], 2, [3]]
// modify the first element of num1
num1[0].push(4);
console.log(nums);
fill 方法 填充 用一个固定值填充一个数组,从指定的开始索引到结束索引,不包括结束索引,返回一个新的数组
arr.fill(value, start, end) // value 要填充的值,start起始索引,默认为0,end 结束索引 默认this.length
fill 方法中如果 start 是一个负数,开始索引自动计算为 length+ start,如果 end 是一个负数,结束索引计算为length+end
Array(3).fill(2)
let arr= Array(3).fill({})
arr[0].a= 'hi' // 如果填充的是对象,数组中的对象引用的是同一个
filter 方法 过滤 返回一个新数组
arr.filter(callback, thisArg)
find() 方法返回满足回调函数的 第一个值,否则返回 undefined,不会改变原数组
arr.find(callback, thisArg)
// 用对象的属性查找数组中的对象
var arr= [
{name: 'hhh', value: 2},
{name: 'fff', value: 3},
{name: 'ddd', value: 2}
]
function findName(people){
return people.name === 'fff'
}
arr.find(findName) // {name: 'fff', value: 3}
forEAch 遍历数组 没有办法中止或者跳出 forEach() 循环
join 讲一个数组或者类数组的所有元素连接成一个字符串
var elem= ['hah', 'hehe', 'heihei']
elem.join() // 'hah,hehe,heihei'
elem.join('') //'hahheheheihei'
// 默认用, 拼接,如果数组长度为0,返回一个空字符创
// 用split转换回来后 类型为string
reduce 方法 将其结果汇总为单个返回值,返回一个值,不会改变原数组
如果数组为空,并且没有提供初始值,会抛出 TypeError ,如果数组仅有一个元素,且没有初始值,如果数组为空,有初始值,则这个唯一的值(数组中的元素或者初始值)将被返回,callback不会被执行
arr.reduce(callbak(要汇总的值,当前值,当前index, 原数组), 初始值)
// 累加对象数组中的值,必须提供初始值,以便各个item正确通过你的函数
var maxCallback = ( acc, cur ) => Math.max( acc.x, cur.x );
var maxCallback2 = ( max, cur ) => Math.max( max, cur );
// reduce() 没有初始值
[ { x: 22 }, { x: 42 } ].reduce( maxCallback ); // 42
[ { x: 22 } ].reduce( maxCallback ); // { x: 22 }
[ ].reduce( maxCallback ); // TypeError
// map/reduce; 这是更好的方案,即使传入空数组或更大数组也可正常执行
[ { x: 22 }, { x: 42 } ].map( el => el.x )
.reduce( maxCallback2, -Infinity ); // 负无穷作为初始值