为 Array 对象添加一个去除重复项的方法

数组去重

http://www.nowcoder.com/questionTerminal/0b5ae9c4a8c546f79e2547c0179bfdc2

原始思维:
Array.prototype.uniq = function() {

var args = this;
var len = args.length;
var result = [];
//定义一个执行一次的函数:
function once(fn) {
    var target = true;
    return function() {
        if (target) {
            fn();
            target = false;
        }
        return undefined;
    }
};
const insertFunction = once(() => {
    result.push(args[i]);
});
for (var i = 0; i < len; i++) {
    if (args.indexOf(args[i]) != -1) { //NaN不等于任何,包括他自身,所以args.indexOf(args[i])遇到NaN永远返回-1
        if (i === args.indexOf(args[i])) {
            result.push(args[i]);
        }
    } else {
        insertFunction();
    }

}
return result;

}
优化后(完全可以利用flag,不用定义只一次执行函数):
Array.prototype.uniq = function() {

var args = this;
var len = args.length;
var result = [];
var flag = true;
for (var i = 0; i < len; i++) {
    if (args.indexOf(args[i]) != -1) { //NaN不等于任何,包括他自身,所以args.indexOf(args[i])遇到NaN永远返回-1
        if (i === args.indexOf(args[i])) {
            result.push(args[i]);
        }
    } else if (flag) {
        result.push(args[i]);
        flag = false;
    }

}
return result

}

全部评论
想问一下第一个if下的if条件是用来测试哪种特殊情况的?
点赞 回复
分享
发布于 2021-08-17 18:41
优化后的方法里面第一个if{后面那个位置错了 ``` for(var i = 0; i < len; i++){ if(args.indexOf(args[i])!= -1){ if(result.indexOf(args[i]) === -1){ result.push(args[i]) } }else if(flag){ result.push(args[i]) flag = false } }
点赞 回复
分享
发布于 2021-09-07 14:58
联易融
校招火热招聘中
官网直投

相关推荐

9 2 评论
分享
牛客网
牛客企业服务