如果元素在另一个对象数组中,则删除包含对象数组内部数组的对象属性

时间:2018-08-30 17:42:18

标签: 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: "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"}]

我需要对任何具有type数组中的id's的匹配ID使用“ lookup”对象。我需要从对象中删除该属性。查找应该是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,但是如果使用该属性,我不确定如何删除该对象属性。

1 个答案:

答案 0 :(得分:1)

对于mongodb-replicaset.mongodb-replicaset.svc.cluster.local中的每个对象,请检查ID是否与lookup数组中的对象匹配。如果匹配,则使用Object.keys从arr数组中的特定对象获取所有键。

伪代码

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

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

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

    arr

    将产生`{id: "12345", array1: ["Banana", "Apple"], array2: ["Orange", "Strawberry"] }['array0']` 。在此过程中,使用["Banana", "Apple"]检查类型是否存在,如果不存在,则使用indexOf从对象中删除键和值

delete

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