您的位置:首页 > 其它

数组实战应用及多种解题思路详解

2017-08-25 23:49 465 查看
一、数组累加

常规循环

function sum(arr) {
var sum = 0;
for(var i = 0;i<arr.length;i++){
sum += arr[i];
}
return sum;
}


forEach遍历

function sum(arr) {
var sum = 0;
arr.forEach(function(item){
sum += item;
});
return sum;
}


reduce归并

function sum(arr) {
return arr.reduce(function(prev,curr){
return prev+curr;
});
}


eval方式

<
4000
/ul>

function sum(arr) {
return eval(arr.join("+"));
}


二、移除数组中与item相同的元素

创建新数组,push方法

function remove(arr, item) {
var arr1 = [];
for(var i = 0;i<arr.length;i++){
if(arr[i] != item){
arr1.push(arr[i]);
}
}
return arr1;
}


filter方法

function remove(arr, item) {
return arr.filter(filt(x) {
return x!= item;
});
}


删除item

function remove(arr, item) {
for(var i = 0;i<arr.length;i++){
if(arr[i] == item){
for(var j = i;j<arr.length-1;j++){
arr[j] = arr[j+1];
}
arr.length--;
}
}
return arr;
}


三、在数组开头加位置添加item

复制数组再添加

function prepend(arr, item) {
var result = arr.concat();
result.unshift(item);
return result;
}


直接拼接

function prepend(arr, item) {
return [item].concat(arr);
}


使用push.apply

function prepend(arr, item) {
return Array.prototype.push.apply([item],arr);
}


四、数组末尾添加

普通拷贝

function append(arr, item) {
var arr1 = arr.concat();
arr1.push(item);
return arr1;
}


浅拷贝

function append(arr, item) {
var arr1 = arr;
arr1.push(item);
return arr1;
}


使用concat将传入的数组与原数组合并

function append(arr, item) {
return arr.concat([item])
}


五、在index处添加

splice

function insert(arr, item, index) {
arr.splice(index,0,item);
return arr;
}


slice+concat

function insert(arr, item, index) {
return arr.slice(0,index).concat([item],arr.slice(index))
}


六、删除数组第一个元素

复制后删除

function curtail(arr) {
var arr1 = arr.concat();
arr1.shift();
return arr1;
}


利用slice

function curtail(arr) {
return arr.slice(1);
}


七、删除数组末尾元素

function truncate(arr) {
arr.pop();
return arr;
}


八、合并数组

function concat(arr1, arr2) {
for(var i = 0;i<arr2.length;i++){
arr1.push(arr2[i]);
}
return arr1;
}


九、统计item出现的次数

循环

function count(arr, item) {
var sum = 0;
for(var i = 0;i < arr.length;i++){
if(arr[i] == item){
sum++;
}
}
return sum;
}


filter

function count(arr, item) {
return arr.filter(function(x) {
return x == item;
}).length;
}


forEach

function count(arr, item) {
var count = 0;
arr.forEach(function(x) {
if(x == 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;
}


十、输出数组重复元素

双循环

function duplicates(arr) {
var result = [];
for(var i = 0; i < arr.length; i++) {
for(var j = i + 1; j < arr.length; j++) {
if(arr[i] == arr[j]) {
result.push(arr[i]);
arr.splice(i, 1);
arr.splice(j, 1);
i -= 2;
j -= 2;
}
}
}
return result;
}


先排序,再循环

function duplicates(arr) {
var copy = arr.sort(function(a, b) {
return a - b;
});
var result = [];
for(var i in copy) {
if(copy[i] == copy[i - 1] && result.indexOf(copy[i]) == -1) {
result.push(copy[i]);
}
}
return result;
}


forEach

function duplicates(arr) {
var result = [];
arr.forEach(function(ele) {
if(arr.indexOf(ele) != arr.lastIndexOf(ele) && result.indexOf(ele) == -1) {
result.push(ele);
}
});
return result;
}


十一、数组去重

Array.prototype.unique = function() {
var flag = false;
for(var i = 0; i < this.length; i++) {
if(this[i] != this[i]) {
flag = true;
}
for(var j = i + 1; j < this.length;) {
if(this[i] == this[j] || (flag && this[j] != this[j])) {
this.splice(j, 1);
} else {
j++;
}
}
}
return this;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: