Find all matching elements with in an array of objects [duplicate]

社会主义新天地 提交于 2019-12-10 15:14:06

问题


I have an array of objects

I am searching within the array like this

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)

This should return an array with this two rows

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

It returns only one row which is the first match.

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

I do not want to use any external libraries for this. How can I return all the matches that match the criteria?


回答1:


Two thing, first, Array.find() return the first matching element, undefined if it finds nothing. Array.filter returns a new array containing all matching elements, [] if it matches nothing.

Second thing, if you want to match 4,5, you have to look into the string and do not make strict comparaison. To make that happens we use of indexOf which is returning the position of the matching string, or -1 if it matches nothing.


Example :

  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:


Array.prototype.find() will, as per the MDN spec: return the value of the first element in the array that satisfies the provided testing function.

What you want to use instead is the filter function .filter() which will return an array of all instances that match your testing function.




回答3:


Use array filter method. Like

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



回答4:


You need to use the filter method in place of find. This will return a new array containing just the members that return a truthy value from the passed in function.




回答5:


With filter and charAt.

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



回答6:


Use 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);


来源:https://stackoverflow.com/questions/52311150/find-all-matching-elements-with-in-an-array-of-objects

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!