当前位置: 首页 > 知识库问答 >
问题:

如何在JS中使用数组过滤对象数组?[副本]

姬锐
2023-03-14

我希望你今天过得愉快。

这很直截了当。我有一个对象数组,我想在另一个数组的帮助下过滤掉它。场景如下所示:

var ob_array = [
                  {'a' : 1, 'col_2' : 'abc'},
                  {'a' : 2, 'col_2' : 'xyz'},
                  {'a' : 3, 'col_2' : 'jkl'}
                 ];

var my_array = [1, 2];

预期输出:

var my_array = [
                 {'a' : 3, 'col_2' : 'jkl'}
               ]

尝试过的方法:

#1:

ob_array.filter(function(i){
   my_array.forEach(function(q){
      i['a'] == q
   })
});

#2:

ob_array.filter(function(i){
   for(var j in my_array){
      i['a'] == j;
   }
});

我主要倾向于使用过滤功能,因为我喜欢它。感谢您查看我的这个小问题。我感谢你的时间和努力。

共有3个答案

刁跃
2023-03-14

使用过滤器包含

var ob_array = [
                  {'a' : 1, 'col_2' : 'abc'},
                  {'a' : 2, 'col_2' : 'xyz'},
                  {'a' : 3, 'col_2' : 'jkl'}
                 ];

var my_array = [1, 2];

const res = ob_array.filter(({a}) => !my_array.includes(a));

console.log(res)
韦胜泫
2023-03-14

数组过滤器接受一个谓词,即返回true或false的回调。

你不返回布尔结果从你的谓词回调,你的代码可以修改如下返回false如果元素与关键a存在于my_array或true否则:

js lang-js prettyprint-override">var ob_array = [{
    'a': 1,
    'col_2': 'abc'
  },
  {
    'a': 2,
    'col_2': 'xyz'
  },
  {
    'a': 3,
    'col_2': 'jkl'
  }
];

var my_array = [1, 2];

const res = ob_array.filter(function(i) {
  for (var j of my_array) {
    if (i['a'] === j) {
      return false;
    }
  }
  return true;
});

console.log(res);
彭修筠
2023-03-14

您可以使用Array.includes,而不是迭代my\u Array

js prettyprint-override">var ob_array = [{
    'a': 1,
    'col_2': 'abc'
  },
  {
    'a': 2,
    'col_2': 'xyz'
  },
  {
    'a': 3,
    'col_2': 'jkl'
  }
];

var my_array = [1, 2];

console.log(ob_array.filter(ob => !my_array.includes(ob.a)))
 类似资料:
  • 问题内容: 我有一个数组模型如下: 现在我有了一个Empid的数组。 所以现在我需要过滤第一个包含第二个中所有键的数组。 输出: 我可以使用循环进行此操作,但是由于我的模型对象中有100多个记录。我需要如何更好地处理此问题的建议。 我正在考虑创建一个自定义过滤器,但是您对此有何看法(如果可以,请提供示例代码来实现此目的)。 感谢您的帮助。 谢谢。 问题答案: 你可以做到这一点, 如果返回一个值,则

  • 如何使用匹配数组的多个值从集合中获取对象。例如:我收集了以下数据

  • 问题内容: 我有两个对象数组。我想基于PermissionObj过滤数据。 这是即将形成的数据库。这是permissionObj中的子数组的数组。 这是静态数据。我想比较基于PermissionObj的数据。 我正在尝试基于 对象 的 PermissionObj数组 过滤 对象 的 数据数组 。这是我尝试的代码。 如果PermissionObj值将与data值匹配。然后显示数据。 我接受的输出将是

  • 问题内容: 我有两个阵列。我正在用PubSidebar过滤基于groupKey。 如果父母重视:日记或存款或任何价值或角色:公共,我在传递内容数组内的对象时遇到问题。我必须在基于的内容数组中传递值。 如果存在Journals and Deposits,则在内容数组内添加Journals and Deposit数据,包括公共数据。(三个对象) 如果存在Journals,则将Contents数组内的J

  • 根据条件过滤一个对象数组,同时过滤掉未指定的键(key)。 使用 Array.filter() 根据断言 fn 过滤数组,以便返回条件为真值(truthy)的对象。 在过滤出来的数组上,使用 Array.map() 和 Array.reduce() 返回新的对象来过滤掉 keys 参数中未提供的键。 const reducedFilter = (data, keys, fn) => data.

  • 问题内容: 鉴于此输入: 我正在尝试使用jq构造一个过滤器,该过滤器返回s的所有对象,这些s 的内部数组中 不 包含“数据” ,并且输出以换行符分隔。对于以上数据,我想要的输出是 我想我与此有点接近: 但过滤器不正确,并且无法编译(获取)。 问题答案: 很接近!在表达式中,您必须在之前使用管道()。 该滤波器产生预期的输出。 的JQ食谱具有语法的一个例子。 例如,我只想要类型键包含“ house”