gpt4 book ai didi

javascript - 如果元素位于另一个对象数组中,则删除对象数组内包含数组的对象属性

转载 作者:行者123 更新时间:2023-12-03 01:13:56 25 4
gpt4 key购买 nike

我正在处理大量对象。我已将数据结构简化为以下内容。每个对象都有一个 id,并且每个 id 都有 0 到 4 个与其关联的数组。数组名称是动态生成的,最多有 2 个元素,并且根据其他要求可以是任意数量的名称。我的初始对象如下所示:

const arr = [{id: "12345", array1: ["Banana", "Apple"], array2: ["Orange", "Strawberry"]}, 
{id: "12345", array0: ["Potato", "Tomato"]},
{id: "54321", array0: ["Kiwi", "Apple"], array1: ["Potato", "Onion"]},
{id: "54321", array2: ["Orange", "Tomato"], array0: ["Kiwi", "Banana"]},
{id: "13579", array1: ["Banana", "Apple"], array2: ["Grapefruit", "Onion"]},
{id: "13579", array1: ["Potato", "Banana"], array2: ["Orange", "Pepper"]}]

我有一个“查找”对象数组。每个对象都有一个id和一个type

const lookup = [{id: "12345", type: "Banana"},
{id: "12345", type: "Kiwi"},
{id: "12345", type: "Apple"},
{id: "54321", type: "Strawberry"}
{id: "54321", type: "Tomato"},
{id: "54321", type: "Banana"},
{id: "13579", type: "Tomato"},
{id: "13579", type: "Grapefruit"}]

我需要对任何匹配的 id 使用“查找”对象,该 id 的 type 位于任何相应的 id 数组中。我需要从对象中删除该属性。查找应该是 1:1,所以我生成的对象数组看起来像这样

const result = [{id: "12345", array2: ["Orange", "Strawberry"]}, 
{id: "12345", array0: ["Potato", "Tomato"]},
{id: "54321", array0: ["Kiwi", "Apple"], array1: ["Potato", "Onion"]},
{id: "54321"},
{id: "13579", array1: ["Banana", "Apple"]},
{id: "13579", array1: ["Potato", "Banana"], array2: ["Orange", "Pepper"]}]

我所关心的部分是提前不知道对象键名称,以及如何使用 lookup 对象的 type 属性在对象条目中搜索该键。我最初的想法是使用 Object.values 但后来我不确定如果使用它如何删除对象属性。

最佳答案

对于lookup中的每个对象,检查arr数组中的id是否匹配。如果匹配,则使用 Object.keys 从 arr 数组中获取该特定对象的所有键。

伪代码

  1. 如果两个数组中的 id 都匹配,则从 arr 数组中获取该对象。
  2. 使用 Object.keys 获取键数组例如该数组现在是

    ['id','array0','array1']

  3. 现在迭代此数组并使用此数组中的元素作为键名称 & 再次检查该值是否为数组。 例如

    `{id: "12345",
    array1: ["Banana", "Apple"],
    array2: ["Orange", "Strawberry"]
    }['array0']`

    将生成["Banana", "Apple"]。在此使用 indexOf 检查类型是否存在,如果不存在则使用 delete 从对象中删除键和值

const arr = [{
id: "12345",
array1: ["Banana", "Apple"],
array2: ["Orange", "Strawberry"]
},
{
id: "12345",
array0: ["Potato", "Tomato"]
},
{
id: "54321",
array0: ["Kiwi", "Apple"],
array1: ["Potato", "Onion"]
},
{
id: "54321",
array2: ["Orange", "Tomato"],
array0: ["Kiwi", "Banana"]
},
{
id: "13579",
array1: ["Banana", "Apple"],
array2: ["Grapefruit", "Onion"]
},
{
id: "13579",
array1: ["Potato", "Banana"],
array2: ["Orange", "Pepper"]
}

]
const lookup = [{
id: "12345",
type: "Banana"
},
{
id: "12345",
type: "Kiwi"
},
{
id: "12345",
type: "Apple"
},
{
id: "54321",
type: "Strawberry"
},
{
id: "54321",
type: "Tomato"
},
{
id: "54321",
type: "Banana"
},
{
id: "13579",
type: "Tomato"
},
{
id: "13579",
type: "Grapefruit"
}
]
let newArray = [];
lookup.forEach(function(item, index) {
arr.forEach(function(arrId, index1) {
if (item.id === arrId.id) {
Object.keys(arrId).forEach(function(elem) {
if (Array.isArray(arrId[elem]) && arrId[elem].indexOf(item.type) !== -1) {
delete arr[index1][elem]
}
})
}
})
})
console.log(arr)

注意:在循环内改变数组不是一个好主意

关于javascript - 如果元素位于另一个对象数组中,则删除对象数组内包含数组的对象属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52102714/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com