获取嵌套对象 - 但标识符是所需对象的一部分

时间:2015-11-27 06:55:11

标签: javascript arrays json

如何从所选文档中获取嵌套对象?

如果这是我的文档,我使用Collection.findOne({ _id: 'dZXr2Pg7Ak4M5aYWF'}) ...

{
    "_id" : "dZXr2Pg7Ak4M5aYWF",
    "points" : [
        {
            "id" : "Gwf5BzorXyYBZSEzK",
            "coordinates" : [
                433,
                215
            ],
            "content" : "anything"
        },
        {
            "id" : "iwSM98W5PD87BtcLa",
            "coordinates" : [
                666,
                186
            ]
        }
    ]
}

...我需要获取id为Gwf5BzorXyYBZSEzK的点的完整数据。所以我的结果应该是这样的:

result = {
    "id" : "Gwf5BzorXyYBZSEzK",
    "coordinates" : [
        433,
        215
    ],
    "content" : "anything"
}

2 个答案:

答案 0 :(得分:0)

您只需使用Array.prototype.filter过滤points数组,就像这样

console.log(data.points.filter(function(obj) {
  return obj.id === "Gwf5BzorXyYBZSEzK";
})[0]);
// { id: 'Gwf5BzorXyYBZSEzK' coordinates: [ 433, 215 ],  content: 'anything' }

我们只从过滤后的结果数组中取出第一个元素。如果你想获得具有特定id的所有元素,那么只需删除下标。

如果您的环境支持ECMAScript 2015's Arrow functions,那么您可以将其写为

console.log(data.points.filter((obj) => obj.id === "Gwf5BzorXyYBZSEzK")[0]);

答案 1 :(得分:0)

var data = {
    "_id": "dZXr2Pg7Ak4M5aYWF",
        "points": [{
        "id": "Gwf5BzorXyYBZSEzK",
            "coordinates": [433, 215],
            "content": "anything"
    }, {
        "id": "iwSM98W5PD87BtcLa",
            "coordinates": [666, 186]
    }]
};
function finder(id){
    for(i=0;i<data.points.length;i++){
        if(data.points[i].id==id){
            return data.points[i];
        }
    }
}
var result = finder("Gwf5BzorXyYBZSEzK");
document.write(JSON.stringify(result));