我正在尋找一種解決方案來查找包含b中值的json對象。例如:在b中查找包含「jinx」的對象。Underscore JS,查找包含數組中值的對象
示例數據。 [{ ID:1 一個: 「報應」, B:[ 「不祥」, 「凱特琳」, 「TRISTANA」] },{ ....},{ ....}]
我理解下劃線對鍵/值對更好,但這會有很大的幫助。
謝謝。
我正在尋找一種解決方案來查找包含b中值的json對象。例如:在b中查找包含「jinx」的對象。Underscore JS,查找包含數組中值的對象
示例數據。 [{ ID:1 一個: 「報應」, B:[ 「不祥」, 「凱特琳」, 「TRISTANA」] },{ ....},{ ....}]
我理解下劃線對鍵/值對更好,但這會有很大的幫助。
謝謝。
這會給你一個包含從陣列in
其中b
包含元素jinx
所有項目對象的數組out
:
var in = [...];
var out = _.filter(in, function(item) {
return _.contains(item.b, 'jinx');
});
讓我試試並更新。謝謝 –
作品,謝謝!只有抱怨是它返回一個對象數組而不僅僅是對象。任何想法?響應= [對象]而不是對象。 –
如果您只對第一個結果感興趣,請用'_.find'替換_.filter。 – Timo
這是我在純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
}
基於您的評論這裏是一個修訂版。這使用下劃線的.filter
方法將數組過濾到b
-keyed數組中的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));
這將工作的單個對象,但我忘了提及我的數據是一個數組。 var sampleData = [{id:1,a:「karma」,b:[「jinx」,「caitlyn」,「tristana」]},{...},{...}] –
作品,謝謝!只有抱怨是它返回一個對象數組而不僅僅是對象。任何想法?響應= [對象]而不是對象。 –
所以你只希望找到你正在搜索的單詞的單個實例?意思只有一個對象將包含'jinx' –
如果你想使用underscore
,您可以使用_.each
循環通過你的對象列表,然後使用_.indexOf
檢查每個b array
中的每個對象,像這樣: http://jsfiddle.net/rkamelot6262/BwHxv/378/
就像你「建立」數據一樣。謝謝。 –
目前還不清楚,樣本數據一個變量如此sample_data [b] .indexOf(「jinx」),如果它返回-1它意味着b不包含jinx –
讓我試試這個和更新。謝謝 –
我已發佈回答我的意思:)因爲它可能不夠清楚在評論:) –