Array.prototype.uniq = function () { var arr = []; var flag = true; this.forEach(function(item) { // 排除 NaN (重要!!!) NaN 和自身不相等 // 除了NaN 其他數據 和 自己都 相等 ...
Array.prototype.uniq = function () { var arr = []; var flag = true; this.forEach(function(item) {
// 排除 NaN (重要!!!) NaN 和自身不相等 // 除了NaN 其他數據 和 自己都 相等 if (item != item) { // 只有第一次找到NaN 把他放進數組裡面 flag && arr.indexOf(item) === -1 ? arr.push(item) : ''; flag = false; } else { arr.indexOf(item) === -1 ? arr.push(item) : '' } }); return arr; } var arr = [NaN,NaN,NaN,1,2,{},{},null,null,undefined,undefined]; var uniqueArr = arr.uniq(); console.log(uniqueArr); // [NaN, 1, 2, {…}, {…}, null, undefined]
// Es6 一行代碼搞定 var uniqueArr2 = Array.from(new Set(arr)); console.log(uniqueArr2); // [NaN, 1, 2, {…}, {…}, null, undefined]