简体   繁体   中英

checking if javascript array contains value using underscorejs

I have an array of cars like this:

[{ name:"Toyota Minivan", id:"506" }, { name:"Honda Civic", id:"619" }]

I am trying to check whether the array contains a certain id.

I have tried

var x =!!_.where(cars, {id:'506'}).length;

expecting it to return true if the array contains the id, but it always returns false.

What am I doing here ?

Btw, I don't have to use underscore.js if there is a better way of doing this.

thanks Thomas

Your code does work (once you fix the syntax errors in the object array): http://jsfiddle.net/ArPCa/

var cars = [{ name:"Toyota Minivan", id:"506"}, { name:"Honda Civic", id:"619"}];
var x =!!_.where(cars, {id:'506'}).length;
console.log('value: ' + x);

returns "value: true". So there must be a problem somewhere else.

But, a better way to do this might be some :

var y = _.some(cars, function(c) {
    return c.id == '506'; 
});

I know this is late, but even easier:

var cars = [{ name:"Toyota Minivan", id:"506"}, { name:"Honda Civic", id:"619"}];

function findById(id) {
  return _.contains(_.pluck(cars, 'id'), id);
}

Say you have the array arr , and your id, id .

arr.filter(function(elem) { return elem.id == id; });

will return an array with the matching element(s);

You could wrap it in a function like:

function findById(arr, id) {
 var filtered = arr.filter(function(elem) { return elem.id == id; });
 return filtered && filtered.length ? filtered[0] : null;
}

, potentially doing some other stuff if you weren't happy with the default filtered array.

var obj = [{
    name: "Toyota Minivan",
    id: "506"
}, {
    name: "Honda Civic",
    id: "619"
}];

function findCar(id) {
    return obj.filter(function (car) {
        if (car.id == id) {
            return car;
        }
    });
}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM