Javascript 基于一个属性检索多个对象

Javascript 基于一个属性检索多个对象,javascript,Javascript,我对JSON非常陌生,所以我甚至不确定是否有可能完成我想做的事情 是否可以基于一个属性获取多个对象? 如果这听起来让人困惑,很抱歉。 基本上,在下面的代码中搜索“red”时,我希望它返回所有包含“red”的对象。此时,它只返回一个 var colors = { "black": {"url": "asdf","tags": "tie"}, "red": {"url": "qwer","tags": "shirt"}, "red": {"url": "lkj","tags"

我对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"]));
这里有一个链接,可以查看它在当前状态下的工作方式:


有可能做到这一点吗?如果有,如何做到?

如果要将多个值与一个键关联,则需要一个嵌套结构。数组可以工作

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的对象初始值设定项语法”并不是什么东西,请你回答。这可能也适用于我正在尝试做的事情。我会尝试一下,最终可能会用这个来代替。