I want to check if a value exist in an array object. Example:
I have this array:
[
{id: 1, name: 'foo'},
{id: 2, name: 'bar'},
{id: 3, name: 'test'}
]
And I want check if id = 2
exists here.
You can use Array.prototype.some
var a = [
{id: 1, name: 'foo'},
{id: 2, name: 'bar'},
{id: 3, name: 'test'}
];
var isPresent = a.some(function(el){ return el.id === 2});
console.log(isPresent);
You can use some().
If you want to just check whether a certain value exists or not, the Array.some()
method (since JavaScript 1.6) is fair enough as already mentioned.
let a = [
{id: 1, name: 'foo'},
{id: 2, name: 'bar'},
{id: 3, name: 'test'}
];
let isPresent = a.some(function(el){ return el.id === 2});
console.log(isPresent);
Also, find() is a possible choice.
If you want to fetch the entire very first object whose certain key has a specific value, it is better to use the Array.find()
method which has been present since ES6.
let hasPresentOn = a.find(
function(el) {
return el.id === 2
}
);
console.log(hasPresentOn);
var isExist = a.some((el)=>{ return el.id === 2});
console.log(isExist);
You could traverse recursively your collection and then you can find the match no matter how deeply nested it is. Beware cycles though. If there might be cycles in the input, then you will need extra measures.
function exists(collection, pattern) {
for (let item in collection) {
if ((item === pattern.key) && (collection[item] === pattern.value)) return true;
if (Array.isArray(collection[item]) || (typeof collection[item] === "object") && exists(collection[item], pattern)) return true;
}
return false;
}
console.log(exists([
{},
{},
{abc: "def"}
], {key: "abc", value: "def"}));
console.log(exists([
{},
{},
{abc: "def"}
], {key: "abc", value: "degf"}));
console.log(exists([
{},
{},
{abc: "def"}
], {key: "abcd", value: "def"}));