为 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
}