从键数组中查找对象数组

时间:2019-07-10 12:54:55

标签: javascript typescript underscore.js lodash

我有一个对象数组

let objList = [
 {
  id:10,
  ...
 },

 {
  id: 12,
  ...
 },

 {
  id: 13,
  ...
 },

 ...
];

我想过滤掉ID在另一个数组中的所有对象

let keyList = [10, 13];

Expected output:

[
 {
  id: 10,
  ...
  },

 {
  id: 13,
  ...
 }
]

注意

  

要求在Angular 7应用程序中,我也使用Lodash库。

我尝试过:

objList.filter(eachObj => keysList.forEach(
          eachID => {
            eachID == eachObj['id']
          }
        ))

find(ObjList, eachObj => {

          return eachObj['id'] === keysList.map(eachID => {
            return eachID;
          })
        })

3 个答案:

答案 0 :(得分:1)

您可以使用过滤器:

objList = objList.filter(element => keyList.indexOf(element.id) > -1);

答案 1 :(得分:1)

由于没有从数组中获得_tacToe[0, 0] _tacToe[1, 1] _tacToe[2, 2] 字段,因此未获得期望的结果。 因此,尝试使用id方法并获取includes属性:

id

答案 2 :(得分:1)

使用_.differenceWith()idkey进行比较,并删除两个数组中都存在的项目:

const objList = [{ id: 10 }, { id: 12 }, { id: 13 }];
const keyList = [10, 13];

const result = _.differenceWith(objList, keyList, ({ id }, key) => id === key);

console.log(result);
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.13/lodash.js"></script>