簡體   English   中英

Js按數組對象過濾數組對象

[英]Js filter array object by array object

我有以下數組。

數組原件:

var array =[
  { "id": 1, "name": "abc", "gender": "m","age": "15" },
  { "id": 2, "name": "a", "gender": "m", "age": "25"  },
  { "id": 3,"name": "efg", "gender": "f","age": "5" },
  { "id": 4,"name": "hjk","gender": "m","age": "35" },
  {  "id": 5, "name": "ikly","gender": "m","age": "41" },
  { "id": 6, "name": "ert", "gender": "f", "age": "30" },
  { "id": 7, "name": "qwe", "gender": "f", "age": "31" },
  { "id":8, "name": "bdd",  "gender": "m", "age": " 8" }
];

數組刪除:

var arrayCopy =[
  { "id": 1, "name": "abc", "gender": "m","age": "15" },
  { "id": 3,"name": "efg", "gender": "f","age": "5" },
  { "id": 7, "name": "qwe", "gender": "f", "age": "31" },
  { "id":8, "name": "bdd",  "gender": "m", "age": " 8" }
];

我必須刪除包含在刪除數組中的原始數組中的元素,但我遇到了一些問題。

我想從數組副本中獲取所有 id 然后進行排除,但我不太確定這是最好的方法。

一些忠告?

創建一要從arrayCopy排除的 id。 然后您可以過濾數組,並保留所有帶有未出現在 Set 中的 id 的項目:

 const array = [{"id":1,"name":"abc","gender":"m","age":"15"},{"id":2,"name":"a","gender":"m","age":"25"},{"id":3,"name":"efg","gender":"f","age":"5"},{"id":4,"name":"hjk","gender":"m","age":"35"},{"id":5,"name":"ikly","gender":"m","age":"41"},{"id":6,"name":"ert","gender":"f","age":"30"},{"id":7,"name":"qwe","gender":"f","age":"31"},{"id":8,"name":"bdd","gender":"m","age":" 8"}]; const arrayCopy = [{"id":1,"name":"abc","gender":"m","age":"15"},{"id":3,"name":"efg","gender":"f","age":"5"},{"id":7,"name":"qwe","gender":"f","age":"31"},{"id":8,"name":"bdd","gender":"m","age":" 8"}]; const idsToExclude = new Set(arrayCopy.map(({ id }) => id)); const result = array.filter(({ id }) => !idsToExclude.has(id)); console.log(result);

我想從數組副本中獲取所有 id 然后進行排除...

是的,這可能是最好的方法。 將它們存儲在Set (ES2015+) 或對象中作為屬性(例如, ids[id] = true ),然后對原始數組使用filter ,只保留 ID 不在集合/對象中的條目。

或者,如果數組很短(ish),您可以在外部數組上使用filter ,然后在“刪除”數組上使用some來確定它是否具有外部數組條目的 ID。 這意味着重復遍歷“刪除”數組(對於外部數組中的每個條目一次),但對於較小的數組,這不是問題。

暫無
暫無

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

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