使用下划线检查javascript数组是否包含值
我有一系列这样的车:使用下划线检查javascript数组是否包含值,javascript,arrays,underscore.js,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 我在这里干什么 顺便说一句,如果有更好的方法,我不必使用下划线.js 谢谢 Thomas说你有数组arr,还有你的id,id arr.
[{ name:"Toyota Minivan", id:"506" }, { name:"Honda Civic", id:"619" }]
我正在尝试检查数组是否包含某个id
我试过了
var x =!!_.where(cars, {id:'506'}).length;
如果数组包含id,则希望它返回true,但它始终返回false
我在这里干什么
顺便说一句,如果有更好的方法,我不必使用下划线.js
谢谢
Thomas说你有数组
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;
}
,如果您对默认筛选数组不满意,则可能会执行其他操作 代码确实有效(一旦修复了对象数组中的语法错误):
返回“value:true”。所以在别的地方肯定有问题
但是,更好的方法可能是some
:
var y = _.some(cars, function(c) {
return c.id == '506';
});
我知道这很晚了,但更容易:
var cars = [{ name:"Toyota Minivan", id:"506"}, { name:"Honda Civic", id:"619"}];
function findById(id) {
return _.contains(_.pluck(cars, 'id'), id);
}
你是对的。问题是,我把id作为字符串传递,我应该传递一个int。谢谢!这里的运行时很奇怪。Pullk包装映射,这样您基本上可以创建数组内容的选择性副本,然后迭代该新副本以找到匹配项。差不多是工作的两倍。
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;
}
});
}
var cars = [{ name:"Toyota Minivan", id:"506"}, { name:"Honda Civic", id:"619"}];
function findById(id) {
return _.contains(_.pluck(cars, 'id'), id);
}