簡體   English   中英

如何從 object 數組返回重復元素

[英]how to return duplicates elemements from object array

data= [
  { "id": 0, "name": "name1", "age": 12, "city": "cityA" },
  { "id": 1, "name": "name2", "age": 7, "city": "cityC" },
  { "id": 2, "name": "name3", "age": 23, "city": "cityB" },
  { "id": 2, "name": "name1", "age": 12, "city": "cityA" }
];

我如何退回具有相同名稱和年齡的物品?

我正在嘗試這樣的事情,但它返回數組中的每個元素

data.some(d => {
for (const it of form) {
if (it.name == d.name && it.age == d.age) {
arr.push(it)....

您必須確保您沒有與同一項目進行比較,其中屬性始終匹配:

 data= [ { "id": 0, "name": "name1", "age": 12, "city": "cityA" }, { "id": 1, "name": "name2", "age": 7, "city": "cityC" }, { "id": 2, "name": "name3", "age": 23, "city": "cityB" }, { "id": 2, "name": "name1", "age": 12, "city": "cityA" } ]; const res = data.filter(item => data.some(i => i.== item && item.name === i.name && item.age === i.age)) console.log(res)

如果您不想第一次出現,則必須檢查已處理的元素:

 data= [ { "id": 0, "name": "name1", "age": 12, "city": "cityA" }, { "id": 1, "name": "name2", "age": 7, "city": "cityC" }, { "id": 2, "name": "name3", "age": 23, "city": "cityB" }, { "id": 2, "name": "name1", "age": 12, "city": "cityA" } ]; const [result, _] = data.reduce(([duplicates, checked], el) => { checked.some(i => el.name === i.name && el.age === i.age) && duplicates.push(el) return [duplicates, [...checked, el]] }, [[], []] ) console.log(result)

基於排序的方法對於這類問題非常有效:

 data= [ { "id": 0, "name": "name1", "age": 12, "city": "cityA" }, { "id": 1, "name": "name2", "age": 7, "city": "cityC" }, { "id": 2, "name": "name3", "age": 23, "city": "cityB" }, { "id": 2, "name": "name1", "age": 12, "city": "cityA" } ]; const sorted = data.sort( (e1, e2) => e1.name.localeCompare(e2.name) || e1.age - e2.age) const result = sorted.filter( (el, i) => i > 0 && sorted[i-1].name === el.name && sorted[i-1].age === el.age) console.log(result)

暫無
暫無

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

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