JS 陣列,陣列物件的合併去重方法
阿新 • • 發佈:2018-11-12
這次對陣列的操作,我們使用es6的新語法來完成,所以在看下邊程式碼之前,我們要了解我們下邊要用到的es6中的set集合,和for...of 方法:
首先介紹set集合:
ES6提供了新的資料結構Set,它類似於陣列,但是成員的值都是唯一的,沒有重複的值。
Set函式可以接受一個數組(或類似陣列的物件)作為引數,用來初始化。
注意:
向set加入值的時候,不會發生型別轉變,所以 5 和 '5' 是兩個不同的值。Set內部判斷兩個值是否相同,用的是類似於 "==="的演算法,但是區別是,在set內部認為NaN 等於 NaN ;
Set例項的屬性和方法:
Set結構的例項有以下屬性。
Set.prototype.constructor
:建構函式,預設就是Set
函式。Set.prototype.size
:返回Set
例項的成員總數。
Set例項的方法分為兩大類:操作方法(用於操作資料)和遍歷方法(用於遍歷成員)。下面先介紹四個操作方法。
add(value)
:新增某個值,返回Set結構本身。delete(value)
:刪除某個值,返回一個布林值,表示刪除是否成功。has(value)
:返回一個布林值,表示該值是否為Set
的成員。clear()
:清除所有成員,沒有返回值。
Set內部的元素可以用 for...of 遍歷。
Array.from()方法可以將Set資料型別轉化為陣列型別。
for...of 方法:
通俗一點的講,就是遍歷的是陣列的元素值,需要深入瞭解的同學,請自行百度,這裡就不贅述。
1、陣列的合併去重
let arr1 = [3,5,2,3,6];
let arr2 = [5,2,4,6,8,7,9,2];
let arr = arr1.concat(arr2); //合併陣列
let arrNew= new Set(arr); //通過set集合去重
console.log("arrNew",Array.from(arrNew)); //將set集合轉化為陣列
結果
2、陣列物件的合併去重
let json1=[
{id:1,name:"aaa"},
{id:2,name:"bbb"},
{id:3,name:"ccc"},
]
let json2=[
{id:1,name:"aaa"},
{id:2,name:"bbb"},
{id:4,name:"ddd"},
]
let json = json1.concat(json2); //兩個陣列物件合併
let newJson = []; //盛放去重後資料的新陣列
for(item1 of json){ //迴圈json陣列物件的內容
let flag = true; //建立標記,判斷資料是否重複,true為不重複
for(item2 of newJson){ //迴圈新陣列的內容
if(item1.id==item2.id){ //讓json陣列物件的內容與新陣列的內容作比較,相同的話,改變標記為false
flag = false;
}
}
if(flag){ //判斷是否重複
newJson.push(item1); //不重複的放入新陣列。 新陣列的內容會繼續進行上邊的迴圈。
}
}
console.log("newJson",newJson);
結果