var a = [1, 2, 4, 5, 7];
//数组可以用字符串为下标
a["z"] = 123;
console.log(a);
// 下面介绍常用数组操作方法
// concat() 方法用于合并两个或多个数组。此方法不会更改现有数组,而是返回一个新数组。
temp = [8, 9, 10];
console.log("=============concat()==============");
var b = a.concat(temp); //注意是返回新的数组,不改变原数组
console.log(b);
console.log("=============copyWithin()==============");
// copyWithin() 方法浅复制数组的一部分到同一数组中的另一个位置,并返回它,不会改变原数组的长度。
/*
target
0 为基底的索引,复制序列到该位置。如果是负数,target 将从末尾开始计算。
如果 target 大于等于 arr.length,将会不发生拷贝。如果 target 在 start 之后,复制的序列将被修改以符合 arr.length。
start
0 为基底的索引,开始复制元素的起始位置。如果是负数,start 将从末尾开始计算。
如果 start 被忽略,copyWithin 将会从0开始复制。
end
0 为基底的索引,开始复制元素的结束位置。copyWithin 将会拷贝到该位置,但不包括 end 这个位置的元素。如果是负数, end 将从末尾开始计算。
如果 end 被忽略,copyWithin 方法将会一直复制至数组结尾(默认为 arr.length)。
*/
console.log(a.copyWithin(1, 3));
//entries() 方法返回一个新的Array Iterator对象,该对象包含数组中每个索引的键/值对。
console.log("=============entries()==============");
for(var t of a.entries()){
console.log(t);
}
//every() 方法测试一个数组内的所有元素是否都能通过某个指定函数的测试。它返回一个布尔值。
//注意:若收到一个空数组,此方法在一切情况下都会返回 true。
var t = function(val){
return val < 10;
}
console.log("=============every()==============");
console.log(a.every(t)); //true //与之相对应的是some, 部分元素满足条件即可;
/*
fill() 方法用一个固定值填充一个数组中从起始索引到终止索引内的全部元素。不包括终止索引
value
用来填充数组元素的值。
start 可选
起始索引,默认值为0。
end 可选
终止索引,默认值为 this.length。
*/
console.log("=============fill()==============");
console.log([1, 2, 3].fill(4)); //[ 4, 4, 4 ]
console.log([1, 2, 3].fill(4, 0, 2)); //[ 4, 4, 3 ]
console.log([1, 2, 3].fill(4, -3, -2));//[ 4, 2, 3 ]
console.log("=============filter()==============");
/*
filter() 方法创建一个新数组, 其包含通过所提供函数实现的测试的所有元素。
callback
用来测试数组的每个元素的函数。返回 true 表示该元素通过测试,保留该元素,false 则不保留。它接受以下三个参数:
element
数组中当前正在处理的元素。
index可选
正在处理的元素在数组中的索引。
array可选
调用了 filter 的数组本身。
thisArg可选
执行 callback 时,用于 this 的值。
*/
var ret = ["leo", "martin", "Tom", "Jackey"].filter(function(ele, index, arr){
console.log(ele, index);
return ele.length <=3;
})
console.log(ret); //[ 'leo', 'Tom' ]
console.log("=============forEach()==============");
/*
forEach() 方法对数组的每个元素执行一次提供的函数。
forEach 与 filter的区别,forEach只是单纯的遍历,没有返回值,
不用过滤写过滤条件
*/
[1, 2, 3, 4].forEach(function (ele, index, arr) {
console.log(ele, index, arr);
})
console.log("=============find()==============");
/*
find() 方法返回数组中满足提供的测试函数的第一个元素的值。否则返回 undefined。
需要些过滤条件,回调函数,参数与every, filter, forEach,相同,区别在于是根据不同的
过滤条件,true ? false 返回值不同;
*/
console.log([100, 234, 442, 123, 345].find(function(ele, index, arr){
console.log();
return ele > 200;
//区别于 findindex() find 返回第一个值,findindex 下标
}));
console.log("=============map()==============");
console.log([1, 2, 3, 4].map(function(ele, index) {
return ele * 2;
}));
console.log("=============reduce()==============");
//reduce() 方法对数组中的每个元素执行一个由您提供的reducer函数(升序执行),将其结果汇总为单个返回值。
//回调函数第二个参数为遍历当前元素,从第二个元素开始,第一个参数为累加器,默认为第一个元素
[1, 2, 4, 23, 21].reduce((acc, cur)=>{
console.log(acc, cur);
return acc + cur;
});
console.log("=============splice()==============");
/*
splice() 方法通过删除或替换现有元素或者原地添加新的元素来修改数组,并以数组形式返回被修改的内容。此方法会改变原数组。
*/
let f = [1, 2, 'leo', 'rita', 'fox'];
f.splice(2, 0, 'martin'); //在第二个位置开始删除0个,插入‘Martin’
console.log(f);
f.splice(2, 1); //从第二个位置开始,删除1个
console.log(f);
f.splice(3, 1, 'leo1', 'chrome'); //删除一个,新增两个
console.log(f);
f.splice(0, f.length); //清空数组
console.log(f);
var numbers = [4, 2, 5, 1, 3];
console.log(numbers.sort()); //会修改原数组
for (const i of numbers) {
console.log(i);
}