JavaScriptWeb前端之路让前端飞

多种方法解决问题才是王道

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;
        })
    }

问题解决了,这种方法,是推荐大家使用的,代码简洁明了,逻辑清晰。
总结:
在解决问题时,我们要从不同的角度去考虑,多尝试一些方法,慢慢我们会发现,逻辑越来越清晰,能力也在稳步增长。

上一篇下一篇

猜你喜欢

热点阅读