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

Retrieving multiple objects based on one attribute Javascript

本文关键字:对象 检索 Javascript 于一个 属性      更新时间:2024-02-14

我对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/

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

如果要将多个值与一个键关联,则需要一个嵌套结构。数组会起作用。

var colors = {
    "black": {"url": "asdf","tags": "tie"},
    "red": [
        {"url": "qwer","tags": "shirt"},
        {"url": "lkj","tags": "blazer"}
    ],
    "grey": {"url": "mnvb","tags": "pants"}
};

现在colors.red将为您提供Array,您可以像正常情况一样对其进行迭代。

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也可以被推广,并作为练习。