![](/img/trans.png)
[英]Find object by property in an array of JavaScript objects inside another array
[英]remove object property containing array inside array of objects if element in another array of objects
我正在处理大量对象。 我将数据结构简化为以下内容。 每个对象都有一个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's
数组中任何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
中的每个对象,请检查id是否与arr
数组匹配。 如果匹配,则使用Object.keys从arr
数组中的特定对象获取所有键。
伪码
arr
数组中获取该对象。 使用Object.keys获取键数组例如,该数组现在是
[ 'ID', 'ARRAY0', 'ARRAY1']
现在,迭代此数组,并&将该数组中的元素用作键名,并再次检查该值是否为数组。 例如
`{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)
注意:在循环内更改数组不是一个好主意
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.