Underscore JS,在数组中查找包含值的对象
Underscore JS, find object which contains value in array
我正在寻找一种解决方案来查找 json 对象,该对象包含 b 中的值。示例:在 b 中查找包含 "jinx" 的对象。
示例数据。
[{
id:1
一个:"karma",
b:["jinx","caitlyn","tristana"]
},
{....},
{....}]
我知道下划线对 key/value 对效果更好,但这会很有帮助。
谢谢。
这将为您提供一个对象数组 out
,其中包含数组 in
中的所有项目,其中 b
包含元素 jinx
:
var in = [...];
var out = _.filter(in, function(item) {
return _.contains(item.b, 'jinx');
});
这是我在纯 js 中的回答:
if(sample_data['b'].indexOf("jinx") != -1){
console.log("Object in b contains jinx");
}
如果您需要支持旧版浏览器,您可以使用这个 polyfill
Array.prototype.indexOf || (Array.prototype.indexOf = function(d, e) {
var a;
if (null == this) throw new TypeError('"this" is null or not defined');
var c = Object(this),
b = c.length >>> 0;
if (0 === b) return -1;
a = +e || 0;
Infinity === Math.abs(a) && (a = 0);
if (a >= b) return -1;
for (a = Math.max(0 <= a ? a : b - Math.abs(a), 0); a < b;) {
if (a in c && c[a] === d) return a;
a++
}
return -1
});
编辑:
既然你说你的数据是这样的
data=[{ id:1 ,a:"karma", b:["jinx","caitlyn","tristana"] }, {1:2}, {1:2}]
//between 1 and a you forgot ,
那你用的就是
if(data[0]['b'].indexOf("jinx") != -1){
console.log("Object in b contains jinx");
}
Underscore.js 有一个 .contains()
方法,在这种情况下可能很有用。如果您只关心搜索对象的 b
键,那么以下方法可行:
var sampleData = { id:1, a:"karma", b:["jinx","caitlyn","tristana"] };
if (_.contains(sampleData.b, 'jinx') {
// Found
} else {
// Not found
}
根据您的评论,这是一个修订版。这使用 Underscore 的 .filter
方法将数组过滤为 b
键控数组中包含 jink
的数组。
var sampleData = [
{ id:1, a:"karma", b:["jinx","caitlyn","tristana"] },
{ id:2, a:"karma", b:["kinx","caitlyn","tristana"] },
{ id:3, a:"karma", b:["linx","caitlyn","tristana"] },
{ id:4, a:"karma", b:["minx","caitlyn","tristana"] },
{ id:5, a:"karma", b:["ninx","caitlyn","tristana"] },
{ id:6, a:"karma", b:["jinx","caitlyn","tristana"] },
{ id:7, a:"karma", b:["pinx","caitlyn","tristana"] },
{ id:8, a:"karma", b:["qinx","caitlyn","tristana"] },
{ id:9, a:"karma", b:["rinx","caitlyn","tristana"] }
];
var findJinx = function(data) {
return _.first(_.filter(data, function(item) {
if (_.contains(item.b, 'jinx')) {
return item;
}
}));
}
console.log(findJinx(sampleData));
如果您想使用 underscore
,您可以使用 _.each
遍历您的对象列表,然后使用 _.indexOf
检查每个对象中的每个 b array
像这样:
http://jsfiddle.net/rkamelot6262/BwHxv/378/
我正在寻找一种解决方案来查找 json 对象,该对象包含 b 中的值。示例:在 b 中查找包含 "jinx" 的对象。
示例数据。 [{ id:1 一个:"karma", b:["jinx","caitlyn","tristana"] }, {....}, {....}]
我知道下划线对 key/value 对效果更好,但这会很有帮助。
谢谢。
这将为您提供一个对象数组 out
,其中包含数组 in
中的所有项目,其中 b
包含元素 jinx
:
var in = [...];
var out = _.filter(in, function(item) {
return _.contains(item.b, 'jinx');
});
这是我在纯 js 中的回答:
if(sample_data['b'].indexOf("jinx") != -1){
console.log("Object in b contains jinx");
}
如果您需要支持旧版浏览器,您可以使用这个 polyfill
Array.prototype.indexOf || (Array.prototype.indexOf = function(d, e) {
var a;
if (null == this) throw new TypeError('"this" is null or not defined');
var c = Object(this),
b = c.length >>> 0;
if (0 === b) return -1;
a = +e || 0;
Infinity === Math.abs(a) && (a = 0);
if (a >= b) return -1;
for (a = Math.max(0 <= a ? a : b - Math.abs(a), 0); a < b;) {
if (a in c && c[a] === d) return a;
a++
}
return -1
});
编辑:
既然你说你的数据是这样的
data=[{ id:1 ,a:"karma", b:["jinx","caitlyn","tristana"] }, {1:2}, {1:2}]
//between 1 and a you forgot ,
那你用的就是
if(data[0]['b'].indexOf("jinx") != -1){
console.log("Object in b contains jinx");
}
Underscore.js 有一个 .contains()
方法,在这种情况下可能很有用。如果您只关心搜索对象的 b
键,那么以下方法可行:
var sampleData = { id:1, a:"karma", b:["jinx","caitlyn","tristana"] };
if (_.contains(sampleData.b, 'jinx') {
// Found
} else {
// Not found
}
根据您的评论,这是一个修订版。这使用 Underscore 的 .filter
方法将数组过滤为 b
键控数组中包含 jink
的数组。
var sampleData = [
{ id:1, a:"karma", b:["jinx","caitlyn","tristana"] },
{ id:2, a:"karma", b:["kinx","caitlyn","tristana"] },
{ id:3, a:"karma", b:["linx","caitlyn","tristana"] },
{ id:4, a:"karma", b:["minx","caitlyn","tristana"] },
{ id:5, a:"karma", b:["ninx","caitlyn","tristana"] },
{ id:6, a:"karma", b:["jinx","caitlyn","tristana"] },
{ id:7, a:"karma", b:["pinx","caitlyn","tristana"] },
{ id:8, a:"karma", b:["qinx","caitlyn","tristana"] },
{ id:9, a:"karma", b:["rinx","caitlyn","tristana"] }
];
var findJinx = function(data) {
return _.first(_.filter(data, function(item) {
if (_.contains(item.b, 'jinx')) {
return item;
}
}));
}
console.log(findJinx(sampleData));
如果您想使用 underscore
,您可以使用 _.each
遍历您的对象列表,然后使用 _.indexOf
检查每个对象中的每个 b array
像这样:
http://jsfiddle.net/rkamelot6262/BwHxv/378/