面试题来源于牛客网,~
1、题目描述 找出元素 item 在给定数组 arr 中的位置 输出描述: 如果数组中存在 item,则返回元素在数组中的位置,否则返回 -1
输入例子: indexOf([ 1, 2, 3, 4 ], 3) 输出例子: 2
function indexOf(arr, item) {
if (Array.prototype.indexOf) {
return arr.indexOf(item);
} else {
for (var i = 0; i < arr.length; i++) {
if (arr[i] === item) {
return i;
}
}
}
return -1;
}
2、数组求和 计算给定数组 arr 中所有元素的总和 输入描述: 数组中的元素均为 Number 类型 输入例子: sum([ 1, 2, 3, 4 ]) 输出例子: 10
//不考虑算法复杂度, 用递归做:
function sum(arr) {
var len = arr.length;
if (len == 0) {
return 0;
} else if (len == 1) {
return arr[0];
} else {
return arr[0] + sum(arr.slice(1));
}
}
//常规循环:while或者for
function sum(arr) {
var s = 0;
for (var i = arr.length - 1; i >= 0; i--) {
s += arr[i];
}
return s;
}
//函数式编程 map 或者 reduce:
function sum(arr) {
return arr.reduce(function(prev, curr, idx, arr) {
return prev + curr;
});
}
//forEach遍历:
function sum(arr) {
var s = 0;
arr.forEach(function(val, idx, arr) {
s += val;
}, 0);
return s;
};
eval:
function sum(arr) {
return eval(arr.join("+"));
};
答案来源:O.z.
3、移除数组 arr 中的所有值与 item 相等的元素。不要直接修改数组 arr,结果返回新的数组 输入例子: remove([1, 2, 3, 4, 2], 2) 输出例子: [1, 3, 4]
//map
function remove(arr, item) {
var result=[];
arr.map(function (value,index,array) {
if (value !== item) {
result.push(value);
}
});
return result;
}
//很常规的for循环
function remove(arr, item) {
var result=[];
for (var i = 0; i < arr.length; i++) {
if(arr[i] !== item){
result.push(arr[i]);
}
}
return result;
}
//看别人还有用filter()的,可以尝试一下。
4、移除数组 arr 中的所有值与 item 相等的元素,直接在给定的 arr 数组上进行操作,并将结果返回 输入例子: removeWithoutCopy([1, 2, 2, 3, 4, 2, 2], 2) 输出例子: [1, 3, 4]
function removeWithoutCopy(arr, item) {
var result=arr;
var i = 0;
while (i<arr.length) {
if (arr[i] == item) {
result.splice(i,1);
}else{
i++;
}
}
return result;
}
//倒着检测,这样就不用担心length问题
function removeWithoutCopy(arr, item) {
for(i=arr.length-1;i>=0;i--) {
if(arr[i]==item) {
arr.splice(i,1);
}
}
return arr;
}
//直接用indexOf
function removeWithoutCopy(arr, item) {
while (arr.indexOf(item) != -1) {
arr.splice(arr.indexOf(item), 1);
}
return arr;
}