关于数组的一点问题求教

有个数组
arr=[
{
id:1,
list:[

 {
  name:'大碗宽面',
  item:[1,2,3,4,5]
 }

]
},
{
id:2,
list:[

 {
   name:'鸡你太美',
   item:[1,2,3,4,5]
 }

]
}
];

var id=3;
var a='豆浆油条';
var b=6;

var id2=2;
var a2='老司机';
var b2=6;

需求:想判断数组里是否有id=3和id=2的对象,没有添加一个,有就判断该对象里name值是否相同,不同就在list里添加新对象,相同就判断item数组里的值是否有b1,b2,没有就添加进数组,最终arr应该变成下面这样

arr=[
{
id:1,
list:[

 {
  name:'大碗宽面',
  item:[1,2,3,4,5]
 }

]
},
{
id:2,
list:[

 {
   name:'鸡你太美',
   item:[1,2,3,4,5]
 },
 {
   name:'老司机',
   item:[6]
 }

]
},
{
id:3,
list:[

 {
   name:'豆浆油条',
   item:[6]
 },

]
}
];

首先想到的是循环数组forEach方法,但是判断id时会添加多个对象,还要多重循环,晕,毛的思路了

阅读 1.8k
4 个回答
arr.forEach(item=>{
    for (param in item) {
        if(param == 'id' && (item[param] == 3||item[param] ==2)) {
            // 执行到这里证明又2或者3
        } else {
            // 执行到这里证明没有
        }
    }
})

思路这样,自己根据需求改改吧

var newItems = {
  2: {name: '老司机', item: [6]},
  3: {name: '豆浆油条', item: [6]}
};
var newIds = Object.keys(newItems);
var oldItems = arr.filter(item => newIds.indexOf(item.id) > -1);
oldItems.forEach(item => {
  var listItem = item.list.find(t => t.name === newItems[item.id].name);
  if (listItem) {
    listItem.item = listItem.item.concat(newItems[item.id].item);
  } else {
    newItems[item.id].id = item.id;
    item.list.push(newItems[item.id]);
  }
})

大概这样,没测试过

你这问题代码写的这么乱,至少排版一下吧,让我一点想要回答的欲望都没有

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题