1. 如果数组中存在 item,则返回元素在数组中的位置,否则返回 -1
function indexOf(arr, item) {
if(Array.prototype.indexOf) {//IE浏览器支不支持indexOf
return arr.indexOf(item);
}
for (var i=0;i<arr.length;i++) {
if (arr[i]==item) {
return i;
}
return -1;
}
}
2.计算给定数组 arr 中所有元素的总和 .有多种解法。
(1)使用forEach函数
function sum(arr) {
var s =0;
arr.forEach(function(currentValue,index,arr) {
s+=currentValue;
},0);
return s;
}
(2)使用eval, 将字符串转化为可执行的代码,但是性能不好
function sum(arr) {
return eval(arr.join('+'));
}
(3)函数式编程,之后补充。
数组方法 reduce 用来迭代一个数组,并且把它累积到一个值中。
使用 reduce 方法时,你要传入一个回调函数,这个回调函数的参数是一个 累加器 (比如例子中的 previousVal) 和当前值 (currentVal)。
reduce 方法有一个可选的第二参数,它可以被用来设置累加器的初始值。如果没有在这定义初始值,那么初始值将变成数组中的第一项,而 currentVal 将从数组的第二项开始。
function sum(arr) {
return arr.reduce(function(prev, curr, idx, arr){
return prev + curr;
});
}
3. 移除数组 arr 中的所有值与 item 相等的元素。不要直接修改数组 arr,结果返回新的数组
function remove(arr, item) {
var result =[];
arr.forEach(function(cur, index, arr) {
if (cur!==item) {
result.push(cur);
}
});
return result;
}
也可以用filter
function remove(arr, item) {
return arr.filter(function (elem) {
return elem !== item;
});
}
4. 移除数组 arr 中的所有值与 item 相等的元素,直接在给定的 arr 数组上进行操作,并将结果返回.
splice(index,len,[item]) 注释:该方法会改变原始数组。
splice有3个参数,它也可以用来替换/删除/添加数组内某一个或者几个值
index:数组开始下标 len: 替换/删除的长度 item:替换的值,删除操作的话 item为空
function removeWithoutCopy(arr, item) {
for(var i =0;i<arr.length;i++) {
if (arr[i]==item) {
arr.splice(i,1);
i--; //注意这里要减去1
}
}
return arr;
}
5. 在数组 arr 末尾添加元素 item。不要直接修改数组 arr,结果返回新的数组
function append(arr, item) {
return arr.concat(item);
}
使用concat将传入的数组或非数组值与原数组合并,组成一个新的数组并返回
function append(arr, item) {
var newArr = arr.slice(0);//slice浅拷贝(start,end)
newArr.push(item);
return newArr;
}
6. 删除数组 arr 最后一个元素。不要直接修改数组 arr,结果返回新的数组
链接:https://www.nowcoder.com/questionTerminal/df4b0b7a459447538351c4c7008b34e7
来源:牛客网
//利用slice
function truncate(arr) {
return arr.slice(0,-1);
}
//利用filter
function truncate(arr) {
return arr.filter(function(v,i,ar) {
return i!==ar.length-1;
});
}
//利用push.apply+pop
function truncate(arr) {
var newArr=[];
[].push.apply(newArr, arr);
newArr.pop();
return newArr;
}
//利用join+split+pop 注意!!!:数据类型会变成字符型
function truncate(arr) {
var newArr = arr.join().split(',');
newArr.pop();
return newArr;
}
//利用concat+pop
function truncate(arr) {
var newArr = arr.concat();
newArr.pop();
return newArr;
}
//普通的迭代拷贝
function truncate(arr, item) {
var newArr=[];
for(var i=0;i<arr.length-1;i++){
newArr.push(arr[i]);
}
return newArr;
}
7.
在数组 arr 开头添加元素 item。不要直接修改数组 arr,结果返回新的数组
//利用concat
function prepend(arr, item) {
return [item].concat(arr);
}
//使用push.apply
function prepend(arr, item) {
var newArr=[item];
[].push.apply(newArr, arr);
return newArr;
}
//利用slice+unshift/splice
function prepend(arr, item) {
var newArr=arr.slice(0);
newArr.unshift(item);//newArr.splice(0,0,item);
return newArr;
}
//使用join+split+unshift/splice组合
function prepend(arr, item) {
var newArr=arr.join().split(',');
newArr.unshift(item);//newArr.splice(0,0,item);
return newArr;
}
//普通的迭代拷贝
function prepend(arr, item) {
var newArr=[];
for(var i=0;i<arr.length;i++){
newArr.push(arr[i]);
}
newArr.unshift(item);
return newArr;
}
8. 删除数组 arr 第一个元素。不要直接修改数组 arr,结果返回新的数组
//利用slice
function curtail(arr) {
return arr.slice(1);
}
//利用filter
function curtail(arr) {
return arr.filter(function(v,i) {
return i!==0;
});
}
//利用push.apply+shift
function curtail(arr) {
var newArr=[];
[].push.apply(newArr, arr);
newArr.shift();
return newArr;
}
//利用join+split+shift 注意!!!:数据类型会变成字符型
function curtail(arr) {
var newArr = arr.join().split(',');
newArr.shift();
return newArr;
}
//利用concat+shift
function curtail(arr) {
var newArr = arr.concat();
newArr.shift();
return newArr;
}
//普通的迭代拷贝
function curtail(arr) {
var newArr=[];
for(var i=1;i<arr.length;i++){
newArr.push(arr[i]);
}
return newArr;
}
9. 在数组 arr 的 index 处添加元素 item。不要直接修改数组 arr,结果返回新的数组
function insert(arr, item, index) {
var newArr=arr.slice(0);
newArr.splice(index,0,item);///////////
return newArr;////return 另起一行
}
//利用slice+concat
function insert(arr, item, index) {
return arr.slice(0,index).concat(item,arr.slice(index));
}
//利用concat +splice
function insert(arr, item, index) {
var newArr=arr.concat();
newArr.splice(index,0,item);
return newArr;
}
//利用slice+splice
function insert(arr, item, index) {
var newArr=arr.slice(0);
newArr.splice(index,0,item);
return newArr;
}
//利用push.apply+splice
function insert(arr, item, index) {
var newArr=[];
[].push.apply(newArr, arr);
newArr.splice(index,0,item);
return newArr;
}
//普通的迭代拷贝
function insert(arr, item, index) {
var newArr=[];
for(var i=0;i<arr.length;i++){
newArr.push(arr[i]);
}
newArr.splice(index,0,item);
return newArr;
}
10. 统计数组 arr 中值等于 item 的元素出现的次数
//filter()-->利用指定的函数确定是否在返回的数组中包含某一项
function count(arr, item) {
var count = arr.filter(function(a) {
return a === item; //返回true的项组成的数组
});
return count.length;
}
//map()-->对数组中的每一项进行给定函数,
//返回每次函数条用的结果组成的数组;
function count(arr, item) {
var count = 0;
arr.map(function(a) {
if(a === item) {
count++;
}
});
return count;
}
//for循环
function count(arr, item) {
var count = 0;
for(var i=0; i<arr.length; i++) {
if(arr[i] === item) {
count++;
}
}
return count;
}
//reduce()-->从数组的第一项开始,逐个遍历到最后;
function count(arr, item) {
var count = arr.reduce(function(prev, curr) {
return curr === item ? prev+1 : prev;
}, 0);
return count;
}
//forEach()-->对数组中的每一项运行传入的函数
function count(arr, item) {
var count = 0;
arr.forEach(function(a) {
a === item ? count++ : 0;
});
return count;
}