Search code examples
javascriptecmascript-6ecmascript-2016

Find all matching elements with in an array of objects


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?


Solution

  • Two things: first, Array.find() returns 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 instead of making a strict comparison. To make that happen we use 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);