多种方法解决问题才是王道
2017-09-07 本文已影响14人
sky丶星如雨
遇到问题,有一种方法解决问题,这是入门,同样的问题,能想出多种解决的办法才是渐入佳境。
来看一个问题。
定义一个数组
var arr = [1,2,3,4,5,6,7];
需求是,在不改变原数组的基础上,移除与给定item相同的元素
function remove(arr,item){}
你会怎么做呢?
最常规的办法
function remove(arr, item) {
var newArr = []; // 定义一个空数组
for (var i = 0; i < arr.length; i++) {
if (arr[i] !== item) {
newArr.push(arr[i]) // 当判断条件成立时,向新数组推加
}
}
return newArr;
}
完美解决了需求,但这是最好的办法吗,显然不是。
再来看一种方法
function remove(arr, item) {
var newArr = arr.slice(0); // 复制一份arr
for (var i = 0; i < newArr.length; i++) {
if (newArr[i] == item) {
newArr.splice(i, 1); // 判断条件成立时,数组中删除当前元素
i--; // 改变了数组长度,所以向前一位,重新判断
}
}
return newArr;
}
这种方法思路较为独特,很有想法,但仍有更好的解决方案,再来看
function remove(arr, item) {
var newArr = [];
for (var i = 0; i < arr.length; i++{
if (arr[i] == item) continue; // 判断条件成立,跳出
newArr.push(arr[i]);
}
return newArr;
}
与第一种方法大同小异,但却是两种思路,相较于第一种方法,个人推荐此种写法。
那么,还有没有更好的办法了呢?答案是有的,我们一起来看:
function remove(arr, item) {
return arr.filter(function (t) {
return t != item;
})
}
问题解决了,这种方法,是推荐大家使用的,代码简洁明了,逻辑清晰。
总结:
在解决问题时,我们要从不同的角度去考虑,多尝试一些方法,慢慢我们会发现,逻辑越来越清晰,能力也在稳步增长。