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

时间:2015-02-21 03:31:32

标签: javascript

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

是否可以这样做,如果可以,怎么做?

2 个答案:

答案 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也可以概括,并留作练习。