3

我有一个具有这种结构的对象数组

const arr = [{
  id: 0,
  name: 'string'
}, {
  id: 1,
  name: 'string'
}]

我也有主阵列

const mainArray = [{
    items: [{
      id: 0,
      name: 'string'
    }]
  },
  {
    items: [{
        id: 5,
        name: 'string'
      },
      {
        id: 3,
        name: 'string'
      }
    ]
  }
];

我正在mainArray屏幕上显示项目数组中的每个项目。我想要做的是arr从每个items数组中删除每个项目并在屏幕上mainArray显示更新。mainArray

我在想做这样的事情

mainArray = mainArray.map((e) => {
      e.items = e.items.filter((el) => {
        return !arr.includes( el );
      });
  }); 

这会返回一个错误Cannot read property 'items' of undefined

或类似的东西

mainArray = mainArray.filter((e) => {
        return !arr.includes( e.items );
  });

但这也行不通。

所有的帮助将不胜感激。

4

2 回答 2

1

正如我在评论中所说,您const以后不能使用关键字并覆盖变量。但是,您不需要这样做,因为您可以毫无问题地修改内部属性:

const arr = [
  { id:0, name:'string' }, 
  { id:1, name:'string' }
]

const mainArray = [{
    items: [{ id:0, name:'string' },]
  },
  {
    items: [
      { id:5, name:'string' },
      { id:3, name:'string' },
      { id:1, name:'string' },
    ]
  }
];


// for each "items" item, check if its "id" exists in the "arr" Array, so 
// I like to use "some" Array method for that:
mainArray.map((e) => {
    e.items = e.items.filter(el => !arr.some(needle => needle.id == el.id))
}); 

console.log( mainArray )

于 2018-11-20T14:01:07.640 回答
0

我会将使用过的 id 映射到一个数组中以便于查找。它是对主要数组项的 foreach 循环,然后使用包含进行过滤以查看该项是否在数组中。

const arr = [{
  id: 0,
  name: 'string'
}, {
  id: 1,
  name: 'string'
}]

const mainArray = [{
    items: [{
      id: 0,
      name: 'string'
    }]
  },
  {
    items: [{
        id: 5,
        name: 'string'
      },
      {
        id: 3,
        name: 'string'
      }
    ]
  }
];

// map ids into a look up array so we do not 
// have to loop over objects every time
const usedIds = arr.map(o => o.id);

// Loop over main array so we can access each object
mainArray.forEach(sa => {
  // replace items with a filtered array
  // filter checks to see if the id is not used
  sa.items = sa.items.filter(o => !usedIds.includes(o.id))
})

console.log(mainArray)

于 2018-11-20T13:55:29.317 回答