const unique = (arr)=>}}
return arr;
};const unique = (arr)=>
if(j === newarr.length)
}return newarr;
}unique([1, '1', '1', 1, 2, true, false, true, 3, 2, 2, 1]); // [ 1, '1', 2, true, false, 3 ]
核心點:
2.1 indexof簡化一層迴圈判斷
核心點:
const unique = (arr) =>
}return res;
}
2.2 includes簡化一層迴圈判斷
核心點:
const unique = (arr) =>
}return res;
}
2.3 indexof和includes對於當前場景的選擇
返回值可以直接作為if的條件語句,簡潔
if(res.indexof(arr[i]) !== -1 )
// or
if(res.includes(arr[i]))
識別nan
如果陣列中有nan
,你又正好需要判斷陣列是否有存在nan
,這時你使用indexof
是無法判斷的,你必須使用includes
這個方法。
var arr = [nan, nan];
arr.indexof(nan); // -1
arr.includes(nan); // true
識別undefined
如果陣列中有undefined
值,includes
會認為空的值是undefined,而indexof
不會。
var arr = new array(3);
console.log(arr.indexof(undefined)); //-1
console.log(arr.includes(undefined)) //true
核心點:
var arr = [1, 1, '1'];
function unique(arr)
last = sortedarr[i]; // 記錄上乙個值
}return res;
}console.log(unique(array));
核心點:
var arr = [1, 2, 1, 1, '1'];
const unique = function (arr) )
return res;
}console.log(unique(arr)); // [ 1, 2, '1' ]
結合排序的思路:
var arr = [1, 2, 1, 1, '1'];
const unique = function (arr) )
}console.log(unique(arr));
前面提到的幾種方式總結下來大致分為
非排序陣列,兩次遍歷判斷(遍歷、查詢)
排序陣列,相鄰元素比較
我們再提出一種方式,利用object物件 key-value的方式,來統計陣列中元素出現的個數,初步判斷邏輯也有兩種
拿[1,1,1,2,2,3,'3']
舉例:
統計每個元素出現的次數,obj:, 返回這個obj
的key
而不管他們的value
只元素首次出現,再次出現則證明他是重複元素
5.1 統計次數
var arr = [1, 2, 1, 1, '1', 3, 3];
const unique = function(arr) ;
var res = ;
arr.foreach(item =>
});return res;
}console.log(unique(arr)); // [1, 2, 3]
5.2 結合filter
var arr = [1, 2, 1, 1, '1'];
const unique = function(arr) ;
return arr.filter(function(item, index, arr))
}console.log(unique(arr)); // [1, 2]
5.3 key: value存在的問題
物件的屬性是字串型別的,即本身數字1
和字串『1』
是不同的,但儲存到物件中時會發生隱式型別轉換,導致去重存在一定的隱患。
考慮到string和number的區別(typeof 1 === 『number』, typeof 『1』 === 『string』),
所以我們可以使用typeof item + item
拼成字串作為 key 值來避免這個問題:
var arr = [1, 2, 1, 1, '1', 3, 3, '2'];
const unique = function(arr) ;
var res = ;
arr.foreach(item =>
});return res;
}console.log(unique(arr)); // [ 1, 2, '1', 3, '2' ]
js之陣列去重
面試常考的點之一吧 我也只被考過set的用法而已 先上最簡單版 利用set new set arr es6 提供了新的資料結構set。它類似於陣列,但是成員的值都是唯一的,沒有重複的值。new set array 得到的是乙個set陣列 沒有重複值 三個點為擴充套件運算子,得到用逗號分隔的引數序列,...
JS之陣列去重
方案一,使用物件判斷陣列是否重複,發現重複則刪除當前項,並再次遍歷當前索引.function unique1 arr 建立乙個空物件 for var i 0 iobj item item 若沒有重複,則給obj新增當前項到屬性 return arr 遍歷完成,將結果返回出去 方案二,使用物件判斷陣列...
js 之 陣列去重
陣列去重,一般都是在面試的時候才會碰到,一般是要求手寫陣列去重方法的 如果是被提問到,陣列去重的方法有哪些?你能答出其中的10種,面試官很有可能對你刮目相看。在真實的專案中碰到的陣列去重,一般都是後台去處理,很少讓前端處理陣列去重。雖然日常專案用到的概率比較低,但還是需要了解一下,以防面試的時候可能...