方法:1、利用「[...new Set(arr)]」語句;2、利用「Array.from(new Set(arr))」語句;3、利用filter和indexOf函數; 4.利用雙重for循環,檢查值是否重複,如果重複就使用push()刪除。
本教學操作環境:windows7系統、javascript1.8.5版、Dell G3電腦。
方法1:[…new Set(arr)]
const arr = [1, 2, 3, 2, 3]; [...new Set(arr)]; // [1, 2, 3]
方法2:Array.from(new Set(arr))
const arr = [1, 2, 3, 2, 3]; Array.from(new Set(arr)); // [1, 2, 3]
由於Set 中的元素是唯一的,無論是原始值或是物件引用,所以可以透過將陣列轉換成Set 物件來實現去重
Array.from方法可以將Set物件轉換成數組。
方法3:利用filter indexOf
function unique(arr) { return arr.filter(function(item, index, arr) { //当前元素,在原始数组中的第一个索引==当前索引值,否则返回当前元素 return arr.indexOf(item, 0) === index; }); } var arr = [1,1,'true','true',true,true,15,15,false,false, undefined,undefined, null,null, NaN, NaN,'NaN', 0, 0, 'a', 'a',{},{}]; console.log(unique(arr)) //[1, "true", true, 15, false, undefined, null, "NaN", 0, "a", {…}, {…}]
方法4:雙重for 迴圈
最容易理解的方法,外層循環遍歷元素,內層循環檢查是否重複
當有重複值的時候,可以使用push(),也可以使用splice()
function distinct(a, b) { let arr = a.concat(b); for (let i=0, len=arr.length; i<len; i++) { for (let j=i+1; j<len; j++) { if (arr[i] == arr[j]) { arr.splice(j, 1); // splice 会改变数组长度,所以要将数组长度 len 和下标 j 减一 len--; j--; } } } return arr }
但這種方法佔用的內存較高,效率也是最低的
方法5:for...of includes()
##雙for迴圈的升級版,外層用for...of 語句取代for 迴圈,把內層迴圈改為 includes()先建立一個空數組,當includes() 回傳false 的時候,就將該元素push到空數組中 類似的,也可以用indexOf() 來取代includes()function distinct(a, b) { let arr = a.concat(b) let result = [] for (let i of arr) { !result.includes(i) && result.push(i) } return result }
javascript高階教程】
以上是javascript數組去重怎麼做的詳細內容。更多資訊請關注PHP中文網其他相關文章!