数组实战应用及多种解题思路详解
2017-08-25 23:49
465 查看
一、数组累加
常规循环
forEach遍历
reduce归并
eval方式
<
4000
/ul>
二、移除数组中与item相同的元素
创建新数组,push方法
filter方法
删除item
三、在数组开头加位置添加item
复制数组再添加
直接拼接
使用push.apply
四、数组末尾添加
普通拷贝
浅拷贝
使用concat将传入的数组与原数组合并
五、在index处添加
splice
slice+concat
六、删除数组第一个元素
复制后删除
利用slice
七、删除数组末尾元素
八、合并数组
九、统计item出现的次数
循环
filter
forEach
reduce
十、输出数组重复元素
双循环
先排序,再循环
forEach
十一、数组去重
常规循环
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; }
相关文章推荐
- MySQL查询实战——多种思路
- Android 网络开发与应用实战详解
- ViewPager的多种应用详解(二)
- leetCode 88.Merge Sorted Array (合并排序数组) 解题思路和方法
- Signalr系列之虚拟目录详解与应用中的CDN加速实战
- 动态规划的一般解题思路-详解
- leetCode 26.Remove Duplicates from Sorted Array(删除数组重复点) 解题思路和方法
- 《深入云计算:Hadoop应用开发实战详解》(万川梅,谢正兰).[PDF]无密码下载
- 一道Java集合框架题 多种解题思路
- 五分钟搞懂后缀数组!后缀数组解析以及应用(附详解代码)
- 第59讲:Scala中隐式转换初体验实战详解以及隐式转换在Spark中的应用源码解析学习笔记
- leetCode 26.Remove Duplicates from Sorted Array(删除数组反复点) 解题思路和方法
- Signalr系列之虚拟目录详解与应用中的CDN加速实战
- 《sudo解决方案企业级应用实战详解》
- TBSchedule应用实战(三)—— 配置详解
- 后缀数组原理及应用详解
- awk数组命令经典生产实战应用拓展
- 高性能Web服务之varnish应用详解及实战应用 推荐
- 求无序数组排序后相邻俩数最大差值(思路及详解)