我对JSON很陌生,所以我甚至不确定是否有可能完成我想要做的事情。
是否可以根据一个属性获取多个对象? 对不起,如果这听起来很混乱。 基本上,当搜索" red"在下面的代码中,我希望它返回所有对象" red"在他们中。此时,它只返回一个。
var colors = {
"black": {"url": "asdf","tags": "tie"},
"red": {"url": "qwer","tags": "shirt"},
"red": {"url": "lkj","tags": "blazer"},
"grey": {"url": "mnvb","tags": "pants"}
}
document.getElementById('output').innerHTML = (JSON.stringify(colors["red"]));
这是一个链接,可以看到它在当前状态下的工作原理: http://jsfiddle.net/8aqweLhv/
是否可以这样做,如果可以,怎么做?
答案 0 :(得分:1)
如果要将多个值与一个键关联,则需要嵌套结构。数组可以工作。
var colors = {
"black": {"url": "asdf","tags": "tie"},
"red": [
{"url": "qwer","tags": "shirt"},
{"url": "lkj","tags": "blazer"}
],
"grey": {"url": "mnvb","tags": "pants"}
};
所以现在colors.red
将为您提供数组,您可以像平常一样进行迭代。
colors.red.forEach(function(obj) {
console.log(obj.url, obj,tags);
});
(顺便说一下,这不是JSON。它只是JavaScript的对象初始化器语法,看起来与JSON数据交换格式非常相似)
答案 1 :(得分:0)
鉴于目的是搜索属性,而不是唯一的密钥,我认为OP正在寻找的是:
var clothing_pieces = {
tie: { color: "red", url: "..." },
pants: { color: "black", url: "..." },
shoes: { color: "red", url: "..." }
};
function getByColor(pieces, color) {
var matchingPieces = [];
for (p in pieces) {
if ( pieces[p].color == color ) { matchingPieces.push(p); }
}
return matchingPieces
}
var myPieces = getByColor(clothing_pieces, "red");
JavaScript内置字典类型功能不足以使用内置运算符[]执行所需的搜索。 getByColor
也可以概括,并留作练习。