使用 JavaScript:我有一個物件陣列,我試圖確定其中的重復條目,以便我最終可以將這些重復條目傳遞給一個單獨的函式,以將它們從資料庫中洗掉。
我的示例陣列可能是:
const myArray = [
{ 'id': 111, 'lorem': 'ipsum' },
{ 'id': 222, 'lorem': 'dorem' },
{ 'id': 111, 'lorem': 'polus' },
{ 'id': 111, 'lorem': 'waifu' },
]
我想回傳一個由 key 重復的所有專案的陣列id。在這個例子中,我回傳的陣列是:
[
{ 'id': 111, 'lorem': 'ipsum' },
{ 'id': 111, 'lorem': 'polus' },
{ 'id': 111, 'lorem': 'waifu' },
]
大多數在線教程都讓我迭代了一個簡短的資料串列,非常適合這樣的小資料示例。但隨著我的資料增長,我的資料集已經成千,甚至數百萬。所以我試圖找到一種更聰明的方式來處理這個邏輯。
我知道我可以運行 a Set(),但這實際上并沒有給我重復的條目 -這給了我一個非重復的陣列。我的需要是回傳這樣的重復項,而不是有一個新的非重復條目陣列。
在不使用 lodash 或下劃線等第三方的情況下,我如何理想地迭代大小未知的陣列,最終回傳重復項讓我傳遞流進行處理?
uj5u.com熱心網友回復:
可能還要等一下
我建議您在服務器上執行此操作
// create an array with random IDs
const myArray = []
for (let i = 0; i < 10000; i ) {
myArray.push({
id: String(Math.floor(Math.random() * 10000)).padStart(3, "0"),
"lorem": "ipsum"
})
}
// examine them
const ids = []
const dupes = []
myArray.forEach(({id}) => {
if (ids.includes(id)) dupes.push(id);
else ids.push(id)
})
console.log(ids.length, dupes, dupes.length)
uj5u.com熱心網友回復:
- 使用
Array#reduce, 迭代陣列,同時更新 aMap以將專案分組id - 使用
Map#values,獲取分組陣列的串列 - 使用
Array#filter,保持陣列包含多個專案 - 使用
Array#flat,回傳一個串列中的所有陣列
const myArray = [ { 'id': 111, 'lorem': 'ipsum' }, { 'id': 222, 'lorem': 'dorem' }, { 'id': 111, 'lorem': 'polus' }, { 'id': 111, 'lorem': 'waifu' } ];
const duplicates =
[...myArray.reduce((map, item) => // group items by id
map.set(item.id, [...(map.get(item.id) || []), item])
, new Map)
.values()] // get grouped arrays
.filter(list => list.length > 1) // keep duplicates
.flat(); // return one array
console.log(duplicates);
uj5u.com熱心網友回復:
擴展我的評論:
const myArray = [
{ 'id': 111, 'lorem': 'ipsum' },
{ 'id': 222, 'lorem': 'dorem' },
{ 'id': 111, 'lorem': 'polus' },
{ 'id': 111, 'lorem': 'waifu' },
];
const uniqueItems = new Set();
const duplicates = [];
myArray.forEach(
function(a) {
if (uniqueItems.has(a.id)) {
duplicates.push(a);
}
uniqueItems.add(a.id);
}
);
console.log("duplicates",duplicates);
console.log("uniqueItems",uniqueItems);
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/346649.html
標籤:javascript 数组
