今天遇到乙個問題,需要對資料進行去重,想看一下有沒有什麼比較方便的方法,果然有些收穫。
問題描述:
我有乙個這樣的資料:
[,,
]
要實現根據 projectid 去重,應該得到下面的結果:
[
,]
先從乙個簡單的問題入手,將乙個陣列去重[1, 2, 3, 3, 4]
通常,我們一般都是這樣去做的,將要用於去重的資料放在乙個 集合 中,將去重的資料放到乙個集合中(最終我們要的資料)
示例**:
//
var arr = [1, 2, 3, 3, 4];
var result = new array();
var filterarr = new array();
for (var i = 0; i < info.length; i++)
}// 或者使用 indexof 判斷
//if (filterarr[i].indexof(arr[i]) > -1)
filterarr.push(arr[i]);
result.push(arr[i]);
}// filter
arr = arr.filter(function (value, index, array) );
// es6
arr = arr.filter( (value, index, array) => array.indexof (value) == index);
//var info = [
,];function filter()
}filterarr.push(info[i].projectid);
result.push(info[i]);
}return result;
}
es6 裡提供了 set 的新語法,set裡不會有重複的元素,簡單陣列去重用它來實現最簡單不過了,舉個栗子:
var arr = [1, 2, 3, 3, 4];
console.log(arr); // [1, 2, 3, 3, 4]
arr = array.from(new set(arr));
console.log(arr);// [1, 2, 3, 4]
//info = info.filter((s => a => !s.has(a.projectid) && s.add(a.projectid))(new set));
是不是 es6 更方便、更簡潔,還沒用es6的童鞋強烈建議使用,
上的一坨**用 es6 只需要一行,只需要一行,只需要一行
info = info.filter((s => a => !s.has(a.projectid) && s.add(a.projectid))(new set));
希望你能有所收穫 JS陣列去重,物件去重
例項1根據indexof去重,indexof的好處就是返回的是首次出現的位置,這樣後面即使出現的值一樣,也只能返回第一次出現的索引,當然這個只適用於簡單的陣列 物件陣列去重 const objarr const obj const newobjarr for let i 0 i objarr.len...
js更加簡潔的小技巧(陣列去重,物件解構)
1 清空或截斷陣列 在不重新給陣列賦值的情況下,清空或截斷陣列的最簡單方法是更改 其 length 屬性值 const arr 1,2,3,4,5 截斷 arr.length 3 console.log arr 1,2,3 清除 arr.length 0 console.log arr consol...
js 陣列去重
function unique arr if isrepeated return result 建立乙個新的陣列,迴圈原有的陣列,每取乙個數就迴圈判斷新建的陣列中是否有和這個相等的值,沒有則插入。方法簡單,但是有雙重迴圈,陣列大了之後效率低。所以能一次迴圈解決最好。var str new array...