我正在寻找一种解决方案,以查找包含b值的json对象。例如:查找包含“jinx”的对象。
示例数据。 [{ id:1 a:"karma", b:["jinx","caitlyn","tristana"] }, {....}, {....}]
我知道underscore在键/值对方面工作得更好,但这将是很大的帮助。
谢谢。
我正在寻找一种解决方案,以查找包含b值的json对象。例如:查找包含“jinx”的对象。
示例数据。 [{ id:1 a:"karma", b:["jinx","caitlyn","tristana"] }, {....}, {....}]
我知道underscore在键/值对方面工作得更好,但这将是很大的帮助。
谢谢。
这将会返回一个包含所有来自数组 in
中 b
包含元素 jinx
的对象的数组 out
:
var in = [...];
var out = _.filter(in, function(item) {
return _.contains(item.b, '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));
_.first
方法更新了解决方案。 - Brett DeWoodyif(sample_data['b'].indexOf("jinx") != -1){
console.log("Object in b contains jinx");
}
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");
}