检查javascript数组是否包含使用underscorejs的值

时间:2013-11-20 23:56:59

标签: javascript arrays underscore.js

我有一系列像这样的汽车:

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

我正在尝试检查数组是否包含某个id。

我试过了

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

如果数组包含id,则期望它返回true,但它总是返回false。

我在这做什么?

顺便说一句,如果有更好的方法,我不必使用underscore.js。

感谢 托马斯

4 个答案:

答案 0 :(得分:13)

您的代码确实有效(一旦修复了对象数组中的语法错误): 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);

返回“value:true”。所以其他地方肯定存在问题。

但是,更好的方法可能是some

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

答案 1 :(得分:5)

我知道这已经晚了,但更容易:

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

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

答案 2 :(得分:4)

假设您拥有数组arr和您的ID id

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

将返回一个包含匹配元素的数组;

您可以将其包装在以下函数中:

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

,如果你对默认的过滤数组不满意,可能会做一些其他的事情。

答案 3 :(得分:0)

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