JavaScript:如何引用对象键中的对象属性?

时间:2014-11-07 02:20:24

标签: javascript functional-programming

我收到错误,因为JavaScript不喜欢videos.id中的点。有办法解决这个问题吗?

假设我有一个数组:

var videos = [
    {
        "id": 65432445,
        "title": "The Chamber"
    },
    {
        "id": 675465,
        "title": "Fracture"
    },
    {
        "id": 70111470,
        "title": "Die Hard"
    },
    {
        "id": 654356453,
        "title": "Bad Boys"
    }
];

//这是一个函数

return videos.map(function(vids){
    return {videos.id : vids.title};  // videos.id does not work
});

3 个答案:

答案 0 :(得分:0)

您不能将变量作为对象键与速记对象构造函数结合使用。您需要先构造对象,然后使用方括号表示法:

return videos.map(function(vid){
    var ret = {};
    ret[vid.id] = vid.title;
    return ret;
});

但这会给你一个类似

的结构
[{675465: "The Chamber"}, ...]

你可能想做这样的事情

var vids = {};
videos.forEach(function (vid) {
    vids[vid.id] = vid.title;
});

导致这样的结构:

{675465: "The Chamber", ...}

允许您通过ID访问视频:

console.log(vids[675465]); // outputs "The Chamber"

答案 1 :(得分:0)

在地图文字中,键始终被解释为字符串。使用动态密钥的唯一方法是使用括号表示法。

你可以试试这个:

videos.map(function(vids) {var x={}; x[vids.id]=vids.title; return x; })

答案 2 :(得分:-1)

这是因为videos是一个对象数组,每个对象都有id属性。它没有自己的id

您访问其中一个元素的id的方式如下:

videos[i].id

我认为这就是你想要的:

return videos.map(function(vids){
    var vid = {};
    vid[vids.id] = vids.title; 
    return vid;
});