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?
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.split(',').indexOf('4') !== -1);
console.log(items);