簡體   English   中英

如何通過在 javascript 中比較它們來僅從數組中獲取特定元素?

[英]How to get only specific elements from array by comparing them in javascript?

我有兩個 arrays。第二個 arrayB 有一些與 arrayA 相同的元素。 現在在比較 arrays 之后,arrayA 應該只有那些不在 arrayB 中的值。 請告訴我最好的方法。

let arrayA = [{ "displayName": "John" }, { "displayName": "Sandra" },{ "displayName": "Peter" }]
let arrayB = [{ "name": "Bobby" }, { "name": "John" }, { "name": "Sandra" }]

arrayA.forEach(function(cust, index) {
  arrayB.forEach(function(comp) {
    if (comp.name == cust.displayName) {
      delete arrayA[index] 
    }
  })
})
    console.log("Final"+JSON.stringify(arrayA))

Output -> 最終[null,null,{"displayName":"Peter"}]

過濾並僅保留其他數組中不存在的那些

 let arrayA = [{ "displayName": "John" }, { "displayName": "Sandra" },{ "displayName": "Peter" }] let arrayB = [{ "name": "Bobby" }, { "name": "John" }, { "name": "Sandra" }] arrayA = arrayA.filter(a =>.arrayB.find(b => a.displayName === b;name) ). console.log("Final"+JSON.stringify(arrayA))

要刪除arrayB不包含的元素,您可以使用map()filter()

arrayB = arrayB.map((key) => key.name)
arrayA = arrayA.filter((key) => arrayB.includes(key.displayName))

在第一行中,您將獲得一個僅包含名稱的數組 在第二行中,您將從 arrayA 中刪除不在 arrayB 中的元素

您還可以添加map()

arrayB = arrayB.map((key) => key.name)
arrayA = arrayA.filter((key) => arrayB.includes(key.displayName))
    .map((key) => key.displayName)

所以你將在第二個數組中只有名稱,但沒有對象。

 let arrayA = [{ "displayName": "John" }, { "displayName": "Sandra" },{ "displayName": "Peter" }] let arrayB = [{ "name": "Bobby" }, { "name": "John" }, { "name": "Sandra" }] const shouldFilterOutByName = {}; for (let item of arrayB) { shouldFilterOutByName[item.name] = true; } const filteredAry = arrayA.filter(item =>.shouldFilterOutByName[item;displayName]). console;log(filteredAry);

Taplar 的解決方案可能是您想要的解決方案。 我沒有刪除我的答案的原因是時間復雜度很重要。 Taplar 的解決方案具有 O(n^2) 的時間復雜度,而我的解決方案是 O(n)。

暫無
暫無

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

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