【数组】数组应用总结
1、 计算给定数组 arr 中所有元素的总和
方法1:用arr.reduce();
function sum(arr) {
return arr.reduce(function(prev, curr, idx, arr){
return prev + curr;
});
}
方法2:用forEach()
function sum(arr) {
var s = 0;
arr.forEach(function(val, idx, arr) {
s += val;
}, 0);
return s;
};
2、 移除数组 arr 中的所有值与 item 相等的元素。不要直接修改数组 arr,结果返回新的数组
方法:使用filter过滤
function remove(arr, item) {
return arr.filter(function(val,idx){
return val!==item;
});
}
function removeWithoutCopy(arr, item) {
for(i=arr.length-1;i>=0;i--){
if(arr[i]==item){
arr.splice(i,1);
}
}
return arr;
}
4、在数组 arr 末尾添加元素 item。不要直接修改数组 arr,结果返回新的数组
方法:使用concat将传入的数组或非数组值与原数组合并,组成一个新的数组并返回
var arr=[1, 2, 3, 4];
function append(arr, item) {
var result=arr.concat(item);
return result;
}
console.log(append(arr, 10));
console.log(arr);
5、 删除数组 arr 最后一个元素。不要直接修改数组 arr,结果返回新的数组
方法1:使用 arr.slice(0,-1);
var arr=[1, 2, 3, 4];
function truncate(arr) {
return arr.slice(0,-1);
}
console.log(truncate(arr)); //[1, 2, 3]
console.log(arr); //[1, 2, 3, 4]
方法2:用filter
var arr=[1, 2, 3, 4];
function truncate(arr) {
return arr.filter(function (val,index,arr) {
return index!=arr.length-1;
});
}
console.log(truncate(arr)); //[1, 2, 3]
console.log(arr); //[1, 2, 3, 4]
6、 在数组 arr 开头添加元素 item。不要直接修改数组 arr,结果返回新的数组
方法1:用unshift
var arr=[1, 2, 3, 4];
function prepend(arr, item) {
var newArr=arr.slice(0);
newArr.unshift(item);
return newArr;
}
console.log(prepend(arr,10)); //[10, 1, 2, 3, 4]
console.log(arr); //[1, 2, 3, 4]
方法2:用concat(),不改变原数组
var arr=[1, 2, 3, 4];
function prepend(arr, item) {
return [item].concat(arr);
}
console.log(prepend(arr,10)); //[10, 1, 2, 3, 4]
console.log(arr); //[1, 2, 3, 4]
7、 删除数组 arr 第一个元素。不要直接修改数组 arr,结果返回新的数组
方法1:用slice()
var arr=[1, 2, 3, 4];
function curtail(arr) {
return arr.slice(1);
}
console.log(curtail(arr,10)); //[2, 3, 4]
console.log(arr); //[1, 2, 3, 4]
方法2:用slice() + shift()
var arr=[1, 2, 3, 4];
function curtail(arr) {
var newArr= arr.slice(0);
newArr.shift();
return newArr;
}
console.log(curtail(arr,10)); //[2, 3, 4]
console.log(arr); //[1, 2, 3, 4]
方法3:用filter
var arr=[1, 2, 3, 4];
function curtail(arr) {
return arr.filter(function (val,index,arr) {
return index!==0;
});
}
console.log(curtail(arr,10)); //[2, 3, 4]
console.log(arr); //[1, 2, 3, 4]
8、 合并数组 arr1 和数组 arr2。不要直接修改数组 arr,结果返回新的数组
var arr1=[1, 2, 3, 4];
var arr2=[5, 6, 7, 8];
function concat(arr1, arr2) {
return arr1.concat(arr2);
}
console.log(concat(arr1, arr2)); //[1, 2, 3, 4, 5, 6, 7, 8]
console.log(arr1); //[1, 2, 3, 4]
console.log(arr2); //[5, 6, 7, 8]
9、 在数组 arr 的 index 处添加元素 item。不要直接修改数组 arr,结果返回新的数组
splice():第二个参数是删除的个数。没有删除写0
var arr=[1, 2, 3, 4];
function insert(arr, item, index) {
var newArr=arr.slice(0);
newArr.splice(index,0,item);
return newArr;
}
console.log(insert(arr, 'z', 2)); //[1, 2, "z", 3, 4]
console.log(arr); //[1, 2, 3, 4]
10、 统计数组 arr 中值等于 item 的元素出现的次数
var arr=[1, 2, 4, 4, 3, 4, 3];
function count(arr, item) {
var newArr=arr.filter(function (val,index,arr) {
return val===item;
});
return newArr.length;
}
console.log(count(arr, 4)); //3
11、 找出数组 arr 中重复出现过的元素
方法1:用filter
var arr=[1, 2, 4, 4, 3, 3, 1, 5, 3];
function duplicates(arr) {
var newArr=[];
arr.forEach(function(value1,index,arr){
var len=arr.filter(function(value2,idx){ //找出相同的元素集合长度
return value2===value1;
}).length;
var len2=newArr.filter(function (value3) { //在新数组中,找是否有该元素
return value3===value1
}).length;
if(len>=2 && len2===0){
newArr.push(value1);
}
});
return newArr;
}
console.log(duplicates(arr)); //[1, 4, 3]
方法2:用indexOf
var arr=[1, 2, 4, 4, 3, 3, 1, 5, 3];
function duplicates(arr) {
var result = [];
arr.forEach(function(elem){
if(arr.indexOf(elem) !=arr.lastIndexOf(elem) && result.indexOf(elem) == -1){
result.push(elem);
}
});
return result;
}
console.log(duplicates(arr)); //[1, 4, 3]
12、 为数组 arr 中的每个元素求二次方。不要直接修改数组 arr,结果返回新的数组
方法1:用map
var arr=[1, 2, 3, 4];
function square(arr) {
return arr.map(function(item,index,array){
return item*item;
})
}
console.log(square(arr)); //[1, 4, 9, 16]
方法2:forEach循环
var arr=[1, 2, 3, 4];
function square(arr) {
var result=[];
arr.forEach(function(val,index,arr){
result.push(val * val);
});
return result;
}
console.log(square(arr)); //[1, 4, 9, 16]
13、 在数组 arr 中,查找值与 item 相等的元素出现的所有位置