为了账号安全,请及时绑定邮箱和手机立即绑定

查找对象键名并将对象添加到匹配数组

查找对象键名并将对象添加到匹配数组

慕少森 2022-12-09 15:03:05
我有这个数组:const array = [  {    '12345': [      { name: 'item one', numbers: ['12345', '77484'] },      { name: 'item two', numbers: ['12345', '65456'] },      { name: 'item three', numbers: ['12345', '33920'] },      { name: 'item four', numbers: ['12345', '99393'] }    ],    '67890': [      { name: 'item one b', numbers: ['67890', '33232'] },      { name: 'item two b', numbers: ['67890', '33456'] },      { name: 'item three b', numbers: ['67890', '77665'] },      { name: 'item four b', numbers: ['67890', '11234'] }    ]  }]这个对象:const newItem = { name: 'It is a new item', numbers: ['12345'] }正如您在数组中看到的,它包含一个对象,该对象包含两个对象数组。这些嵌套数组中的每一个的键都是一个数字,正如您所看到的,键号也包含在每个项目的数字数组中,例如:{ name: 'item one', numbers: ['12345', '77484'] },That 包含其数字数组中的键'12345',因此'12345'是该对象的父级。我想获取 的编号newItem,将其与父键匹配并将其添加到与匹配键父项对应的数组中。请考虑到这是虚拟数据,并想象其中的数字数组newItem是一个动态值,嵌套数组有很多值。这里的想法是匹配这两个数字以知道应该将 newItem 推到哪里。
查看完整描述

4 回答

?
哆啦的时光机

TA贡献1779条经验 获得超6个赞

试试看:


array.map((row) => {

  Object.keys(row).map((value) => {

    if (newItem.numbers.indexOf(value) >= 0) {

      row[value].push(newItem);

    }

  });

});


查看完整回答
反对 回复 2022-12-09
?
HUX布斯

TA贡献1876条经验 获得超6个赞

你可以这样做:


    for (let i=0; i<array.length; i++) {

        array[i][newItem.numbers[0]] = array[i][newItem.numbers[0]] || [];

        array[i][newItem.numbers[0]].push(newItem);

    }

如果嵌套数组不存在,第一行初始化它。第二行将新项目推送到嵌套数组。


请参阅下面的代码片段。


const array = [

    {

        '12345': [

            { name: 'item one', numbers: ['12345', '77484'] },

            { name: 'item two', numbers: ['12345', '65456'] },

            { name: 'item three', numbers: ['12345', '33920'] },

            { name: 'item four', numbers: ['12345', '99393'] },

        ],

        '67890': [

            { name: 'item one b', numbers: ['67890', '33232'] },

            { name: 'item two b', numbers: ['67890', '33456'] },

            { name: 'item three b', numbers: ['67890', '77665'] },

            { name: 'item four b', numbers: ['67890', '11234'] },

        ],

    }

]



const newItem = {

    name: 'It is a new item',

    numbers: ['12345'],

}



for (let i=0; i<array.length; i++) {

    array[i][newItem.numbers[0]] = array[i][newItem.numbers[0]] || [];

    array[i][newItem.numbers[0]].push(newItem);

}


console.log(array); 


查看完整回答
反对 回复 2022-12-09
?
临摹微笑

TA贡献1982条经验 获得超2个赞

在解构的帮助下。


const [obj] = array;

const {

  numbers: [key],

} = newItem;

obj[key].push(newItem);

const array = [

  {

    "12345": [

      {

        name: "item one",

        numbers: ["12345", "77484"],

      },

      {

        name: "item two",

        numbers: ["12345", "65456"],

      },

      {

        name: "item three",

        numbers: ["12345", "33920"],

      },

      {

        name: "item four",

        numbers: ["12345", "99393"],

      },

    ],

    "67890": [

      {

        name: "item one b",

        numbers: ["67890", "33232"],

      },

      {

        name: "item two b",

        numbers: ["67890", "33456"],

      },

      {

        name: "item three b",

        numbers: ["67890", "77665"],

      },

      {

        name: "item four b",

        numbers: ["67890", "11234"],

      },

    ],

  },

];


const newItem = {

  name: "It is a new item",

  numbers: ["12345"],

};


const [obj] = array;

const {

  numbers: [key],

} = newItem;

obj[key].push(newItem);


console.log(array);


查看完整回答
反对 回复 2022-12-09
?
qq_笑_17

TA贡献1818条经验 获得超7个赞

const array = [

  {

    '12345': [

      { name: 'item one', numbers: ['12345', '77484'] },

      { name: 'item two', numbers: ['12345', '65456'] },

      { name: 'item three', numbers: ['12345', '33920'] },

      { name: 'item four', numbers: ['12345', '99393'] }

    ],

    '67890': [

      { name: 'item one b', numbers: ['67890', '33232'] },

      { name: 'item two b', numbers: ['67890', '33456'] },

      { name: 'item three b', numbers: ['67890', '77665'] },

      { name: 'item four b', numbers: ['67890', '11234'] }

    ]

  }

]


const newItem = { name: 'It is a new item', numbers: ['12345'] }


newItem.numbers.forEach(n => array[0]?.[n].push(newItem));


console.log(array);


查看完整回答
反对 回复 2022-12-09
  • 4 回答
  • 0 关注
  • 151 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号