Javascript 如果元素位于另一个对象数组中,则删除对象数组中包含数组的对象属性
我正在处理大量对象。我已将我的数据结构简化为以下内容。每个对象都有一个Javascript 如果元素位于另一个对象数组中,则删除对象数组中包含数组的对象属性,javascript,arrays,object,ecmascript-6,Javascript,Arrays,Object,Ecmascript 6,我正在处理大量对象。我已将我的数据结构简化为以下内容。每个对象都有一个id,每个id都有0到4个与其关联的数组。数组名称是动态生成的,最多有2个元素,可以是基于其他要求的任意数量的名称。我的初始对象如下所示: const arr = [{id: "12345", array1: ["Banana", "Apple"], array2: ["Orange", "Strawberry"]}, {id: "12345", array0: ["Potato", "Tomato
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"}]
我需要将“lookup”对象用于在任何相应的id的数组中具有类型的任何匹配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"]}]
我要挂断的部分是,事先不知道对象键的名称,以及如何使用查找
对象的type属性在对象条目中搜索该键。我最初的想法是使用Object.values
,但是如果我使用它,我不确定如何删除Object属性。对于查找中的每个对象
检查arr
数组中的id是否匹配。如果匹配,则使用object.keys从arr
数组中的特定对象获取所有键
伪码
如果id在两个数组中都匹配,则从arr
数组中获取该对象
使用Object.keys获取密钥数组,例如,现在将创建该数组
['id'、'array0'、'array1']
现在迭代该数组并使用该数组中的元素作为键名(&U)
&再次检查该值是否为数组。
比如说
`{id: "12345",
array1: ["Banana", "Apple"],
array2: ["Orange", "Strawberry"]
}['array0']`
将生产[“香蕉”、“苹果”]
。在此过程中,使用indexOf
检查类型是否存在,如果不存在,则使用delete
从对象中删除键和值
const arr=[{
身份证号码:“12345”,
阵列1:[“香蕉”、“苹果”],
array2:[“橙色”、“草莓色”]
},
{
身份证号码:“12345”,
数组0:[“土豆”、“西红柿”]
},
{
id:“54321”,
阵列0:[“猕猴桃”、“苹果”],
数组1:[“土豆”、“洋葱”]
},
{
id:“54321”,
array2:[“橙色”、“西红柿”],
数组0:[“猕猴桃”、“香蕉”]
},
{
身份证号码:“13579”,
阵列1:[“香蕉”、“苹果”],
阵列2:[“葡萄柚”、“洋葱”]
},
{
身份证号码:“13579”,
阵列1:[“土豆”、“香蕉”],
array2:[“橙色”、“胡椒色”]
}
]
常量查找=[{
身份证号码:“12345”,
类型:“香蕉”
},
{
身份证号码:“12345”,
类型:“猕猴桃”
},
{
身份证号码:“12345”,
类型:“苹果”
},
{
id:“54321”,
类型:“草莓”
},
{
id:“54321”,
类型:“番茄”
},
{
id:“54321”,
类型:“香蕉”
},
{
身份证号码:“13579”,
类型:“番茄”
},
{
身份证号码:“13579”,
类型:“葡萄柚”
}
]
设newArray=[];
forEach(函数(项、索引){
arr.forEach(函数(arrId,index1){
if(item.id==arrId.id){
Object.keys(arrId).forEach(函数(elem){
if(Array.isArray(arrId[elem])&&arrId[elem].indexOf(item.type)!=-1){
删除arr[index1][elem]
}
})
}
})
})
控制台日志(arr)