簡體   English   中英

從對象的多維數組中刪除重復項

[英]Removing duplicates from Multidimensional array of objects

問題很簡單。 我有一組對象數組。 例子:

[[{'name':'cat"}, {'name':'lion'}], [{'name':'elephant"},
{'name':'lion'}, {'name':'dog'}], [{'name':'tiger"}, {'name':'mouse'},
{'name':'dog'}]]

我想使用 JS 刪除重復項並僅保留它們的第一次出現並刪除它們的重復項,從而導致:

[[{'name':'cat"}, {'name':'lion'}], [{'name':'elephant"},
{'name':'dog'}], [{'name':'tiger"}, {'name':'mouse'}]]

我如何使用 loadash/下划線來做到這一點? 我嘗試了很多選項,第一個涉及將迭代對象傳遞給.uniq函數,但它沒有按我想要的方式工作,因為這些是二維數組。 另一種蠻力方法包括逐個遍歷所有數組,然后進行搜索以查看是否有任何其他數組包含該元素並刪除該元素。 重復這個過程直到最后一個子數組。

不喜歡蠻力方法,所以想知道是否還有其他方法可以保留獨特的元素。

請注意,這是一個二維對象數組,堆棧溢出的所有帖子都回答一維對象數組。 我不想在數組中找到重復項。 我正在嘗試在數組中的所有數組中查找重復項。

我處理這個問題的好方法是使用Set ,只需在map() filter()將標簽添加到集合中:

 let arr = [ [{'name':'cat'}, {'name':'lion'}], [{'name':'elephant'},{'name':'lion'}, {'name':'dog'}], [{'name':'tiger'}, {'name':'mouse'}, {'name':'dog'}] ] let known = new Set() let filtered = arr.map(subarray => subarray.filter(item => !known.has(item.name) && known.add(item.name)) ) console.log(filtered)

編輯:如果您不能使用 Set,則可以從常規對象獲得相同的功能:

 let arr = [ [{'name':'cat'}, {'name':'lion'}], [{'name':'elephant'},{'name':'lion'}, {'name':'dog'}], [{'name':'tiger'}, {'name':'mouse'}, {'name':'dog'}] ] let known = {} let filtered = arr.map(subarray => subarray.filter(item => !known.hasOwnProperty(item.name) && (known[item.name] = true)) ) console.log(filtered)

var a = [];
a.push( [1,2,3], [4,5,6], [1,2,3], [4,5,6] );
a.forEach( ( chunk, idx ) => { a[idx] = JSON.stringify(chunk); } );
a = [ ...new Set(a) ];
a.forEach( ( chunk, idx ) => { a[idx] = JSON.parse(chunk); } );
let intervals = [
    [1, 20],
    [1, 20],
    [1, 20]
]
intervals = [...new Set(intervals.map(e => JSON.stringify(e)))].map(e => JSON.parse(e)) // [[1,20]]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM