在对象数组中查找所有匹配的元素[重复]

Posted

技术标签:

【中文标题】在对象数组中查找所有匹配的元素[重复]【英文标题】:Find all matching elements with in an array of objects [duplicate] 【发布时间】:2019-02-18 00:54:33 【问题描述】:

我有一个对象数组

我正在像这样在数组中搜索

let arr = [
     name:"string 1", arrayWithvalue:"1,2", other: "that" ,
     name:"string 2", arrayWithvalue:"2", other: "that" ,
     name:"string 2", arrayWithvalue:"2,3", other: "that" ,
     name:"string 2", arrayWithvalue:"4,5", other: "that" ,
     name:"string 2", arrayWithvalue:"4", other: "that" ,
];
var item  = arr.find(item => item.arrayWithvalue === '4'); 
console.log(item)

这应该返回一个包含这两行的数组

 name:"string 2", arrayWithvalue:"4,5", other: "that" ,
 name:"string 2", arrayWithvalue:"4", other: "that" 

它只返回第一个匹配的一行。

 name:"string 2", arrayWithvalue:"4", other: "that" 

我不想为此使用任何外部库。如何返回所有符合条件的匹配项?

【问题讨论】:

【参考方案1】:

两件事,第一,Array.find() 返回第一个匹配元素,undefined 如果它什么也没找到。 Array.filter 返回一个包含所有匹配元素的新数组,[] 如果不匹配。

第二件事,如果你想匹配4,5,你必须查看字符串,不要进行严格的比较。为了实现这一点,我们使用 indexOf 返回匹配字符串的位置,如果不匹配则使用 -1


示例

const arr = [
  
    name: 'string 1',
    arrayWithvalue: '1,2',
    other: 'that',
  ,
  
    name: 'string 2',
    arrayWithvalue: '2',
    other: 'that',
  ,
  
    name: 'string 2',
    arrayWithvalue: '2,3',
    other: 'that',
  ,
  
    name: 'string 2',
    arrayWithvalue: '4,5',
    other: 'that',
  ,
  
    name: 'string 2',
    arrayWithvalue: '4',
    other: 'that',
  ,
];

const items = arr.filter(item => item.arrayWithvalue.indexOf('4') !== -1);

console.log(items);

【讨论】:

正是我想要的,【参考方案2】:

使用数组过滤方法。 喜欢

arr.filter(res => res.arrayWithvalue.indexOf('4') !== -1);

【讨论】:

【参考方案3】:

Array.prototype.find() 将按照MDN spec:返回数组中满足提供的测试功能的第一个元素的值

您要改用 filter function .filter() ,它将返回与您的测试函数匹配的所有实例的数组。

【讨论】:

【参考方案4】:

您需要使用filter 方法代替find。这将返回一个新数组,其中仅包含从传入函数返回真值的成员。

【讨论】:

【参考方案5】:

使用filter 和charAt。

const result = arr.filter(item => item.arrayWithvalue.charAt(0) === '4');

【讨论】:

那么知道如果你想匹配 42 号会发生什么吗?不建议使用item.arrayWithvalue.charAt(0)【参考方案6】:

使用array.filter:

var arr = [
     name:"string 1", arrayWithvalue:"1,2", other: "that" ,
     name:"string 2", arrayWithvalue:"2", other: "that" ,
 name:"string 2", arrayWithvalue:"2,3", other: "that" ,
 name:"string 2", arrayWithvalue:"4,5", other: "that" ,
 name:"string 2", arrayWithvalue:"4", other: "that" ,
];

var res = arr.filter(e => e.arrayWithvalue.split(',')[0] === '4');
console.log(res);

【讨论】:

那么知道如果你想匹配42号码会发生什么吗?不建议使用e.arrayWithvalue.split(',')[0]

以上是关于在对象数组中查找所有匹配的元素[重复]的主要内容,如果未能解决你的问题,请参考以下文章

根据具有不同对象的匹配字段从数组列表中删除重复元素

用对象存储的方法实现查找字符串或者数组中重复次数最多的元素!!!!!

jQuery$.each循环遍历详解,各种取值对比,$.each遍历数组对象Dom元素二维数组双层循坏类json数据等等

创建查询以在对象数组中查找对象[重复]

创建查询以在对象数组中查找对象[重复]

java中 如何从LIST 查找指定元素的位置