Javascript 为对象的键定义值时获取未定义

Javascript 为对象的键定义值时获取未定义,javascript,arrays,object,Javascript,Arrays,Object,这就是我试图从中提取信息的对象。我正在尝试获取一个包含标题和长度列表的对象。这是我当前的代码和输出 var playlistResponse = { "id": "59ZbFPES4DQwEjBpWHzrtC", "followers": { "href": null, "total": 143350 }, "trackInfo": { "playlistType": "favorites", "lastUpdated": "2015-11-26T

这就是我试图从中提取信息的对象。我正在尝试获取一个包含
标题
长度
列表的对象。这是我当前的代码和输出

var playlistResponse = {
  "id": "59ZbFPES4DQwEjBpWHzrtC",
  "followers": {
    "href": null,
    "total": 143350
  },
  "trackInfo": {
    "playlistType": "favorites",
    "lastUpdated": "2015-11-26T19:13:31",
    "tracks": [
      {
        "id": "0C0XlULifJtAgn6ZNCW2eu",
        "type": "track",
        "artist": "Travis Scott",
        "title": "goosebumps",
        "length": "4:03",
        "playCount": 404489462,
        "genre": "rap"
      },
      {
        "id": "4OHNH3sDzIxnmUADXzv2kT",
        "type": "track",
        "artist": "LCD Soundsystem",
        "title": "Someone Great",
        "length": "6:30",
        "playCount": 23765430,
        "genre": "alternative"
      },
      {
        "id": "3twNvmDtFQtAd5gMKedhLD",
        "type": "track",
        "artist": "Cut Copy",
        "title": "Hearts On Fire",
        "length": "4:52",
        "playCount": 23098109,
        "genre": "alternative"
      },
      {
        "id": "5m4VYOPoIpkV0XgOiRKkWC",
        "type": "track",
        "artist": "Cut Copy",
        "title": "HUMBLE.",
        "length": "4:11",
        "playCount": 768356720,
        "genre": "rap"
      },
      {
        "id": "1l63szZeUpN1m87MOD1u7K",
        "type": "track",
        "artist": "Whitney Houston",
        "title": "I Wanna Dance With Somebody (Who Loves Me)",
        "length": "4:51",
        "playCount": 184656875,
        "genre": "pop"
      }
    ]
  }
};

我不明白为什么我似乎无法访问我的长度属性。如果运行
console.log(listOfTracks[0].length),它返回
undefined
,但是我得到了一个定义的值,但是这个代码应该与我在
forEach
循环中的代码相同。我在这里遗漏了什么?

我想你想做的是:

var播放列表响应={
“id”:“59ZbFPES4DQwEjBpWHzrtC”,
“追随者”:{
“href”:空,
“总数”:143350
},
“跟踪信息”:{
“播放类型”:“收藏夹”,
“最新更新”:“2015-11-26T19:13:31”,
“轨道”:[
{
“id”:“0C0XlULifJtAgn6ZNCW2eu”,
“类型”:“轨道”,
“艺术家”:“特拉维斯·斯科特”,
“标题”:“鸡皮疙瘩”,
“长度”:“4:03”,
“播放次数”:404489462,
“体裁”:“说唱”
},
{
“id”:“4OHNH3sDzIxnmUADXzv2kT”,
“类型”:“轨道”,
“艺术家”:“液晶音响系统”,
“头衔”:“伟大的人”,
“长度”:“6:30”,
“播放次数”:23765430,
“流派”:“另类”
},
{
“id”:“3twNvmDtFQtAd5gMKedhLD”,
“类型”:“轨道”,
“艺术家”:“剪切副本”,
“标题”:“燃烧的心”,
“长度”:“4:52”,
“播放次数”:23098109,
“流派”:“另类”
},
{
“id”:“5M4VyopoipkV0xGoirkWc”,
“类型”:“轨道”,
“艺术家”:“剪切副本”,
“头衔”:“谦逊”,
“长度”:“4:11”,
“播放次数”:768356720,
“体裁”:“说唱”
},
{
“id”:“1l63szZeUpN1m87MOD1u7K”,
“类型”:“轨道”,
“艺术家”:“惠特尼·休斯顿”,
“标题”:“我想和爱我的人跳舞”,
“长度”:“4:51”,
“播放次数”:184656875,
“流派”:“流行”
}
]
}
};
功能FindAllonger(播放列表输入、跟踪时间){
var listOfTracks={};
var arrayOfTracks=playlinput.trackInfo.tracks;
arrayOfTracks.forEach(函数(值){
listOfTracks[value.title]=value.length;
})
返回跟踪列表;
}
控制台日志(FindAllonger(播放响应))
/*输出
{鸡皮疙瘩:“4:03”,
“伟大的人”:“6:30”,
《燃烧的心》:“4:52”,
“谦卑。”:“4:11”,
‘我想和爱我的人跳舞’‘4:51’

*/
应该是
listOfTracks[value.title]=value.length啊。谢谢@Pointy。真不敢相信我错过了这么简单的事情。知道为什么我的第一个
标题
鸡皮疙瘩
的值没有写成字符串吗?@newatlearning这是一个字符串。所有对象键都是字符串(除非它们是符号,这里不是这种情况)。我猜您的控制台选择显示不带引号的值,除非它们包含空格或点之类的符号。我还猜想破折号、加号等会触发这种行为——任何不能用点符号获取属性的东西。@VLAZ我想它必须是字符串。谢谢
function findAllLonger(playListInput, trackTime) {
  var listOfTracks = {};
  var arrayOfTracks = playListInput.trackInfo.tracks;

  arrayOfTracks.forEach(function (value) {
    listOfTracks[value.title] = listOfTracks[value.length];
  })

  return listOfTracks;
}

/* Output
{ goosebumps: undefined,
  'Someone Great': undefined,
  'Hearts On Fire': undefined,
  'HUMBLE.': undefined,
  'I Wanna Dance With Somebody (Who Loves Me)': undefined }
*/