原始思维:
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}

京公网安备 11010502036488号