Javascript 基于一个属性检索多个对象
我对JSON非常陌生,所以我甚至不确定是否有可能完成我想做的事情 是否可以基于一个属性获取多个对象? 如果这听起来让人困惑,很抱歉。 基本上,在下面的代码中搜索“red”时,我希望它返回所有包含“red”的对象。此时,它只返回一个Javascript 基于一个属性检索多个对象,javascript,Javascript,我对JSON非常陌生,所以我甚至不确定是否有可能完成我想做的事情 是否可以基于一个属性获取多个对象? 如果这听起来让人困惑,很抱歉。 基本上,在下面的代码中搜索“red”时,我希望它返回所有包含“red”的对象。此时,它只返回一个 var colors = { "black": {"url": "asdf","tags": "tie"}, "red": {"url": "qwer","tags": "shirt"}, "red": {"url": "lkj","tags"
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"]));
这里有一个链接,可以查看它在当前状态下的工作方式:
有可能做到这一点吗?如果有,如何做到?如果要将多个值与一个键关联,则需要一个嵌套结构。数组可以工作
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数据交换格式惊人地相似)鉴于其目的是搜索属性,而不是唯一的键,我认为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
也可以泛化,并作为练习使用。在您的情况下,同一个键上不能有多个对象,只有最后一个红色对覆盖前的对象进行计数。您所能做的是使颜色成为一个对象数组。和按进行筛选/搜索key@NetaMeta如果这是一个内在属性呢?有可能用一个公共属性获取所有元素吗?你到底想做什么?看看六指先生的回答,这可能是你想要的,但这行代码不再有效:“document.getElementById('output').innerHTML=(JSON.stringify(colors[“red”]);”我可以用什么来代替它呢?@Po诗学科学家:你是说stringify()
?为什么不呢?这只是JavaScript的对象初始值设定语法?你的意思是对象文字吗?@NetaMeta:有什么区别吗?区别在于“JavaScript的对象初始值设定项语法”并不是什么东西,请你回答。这可能也适用于我正在尝试做的事情。我会尝试一下,最终可能会用这个来代替。