从包含JSON的关联数组中的值中查找键

时间:2014-10-22 18:34:27

标签: javascript arrays

我已经搜索过,发现了一些相似但不完全的答案。

我有一个数组SongList(显示2项简洁......) - 第一对是一个键,第二对是一些JSON。

SongList={
    song_1:{title:"title of first song",artist:"the artist",mp3:"http://mysite/song1.mp3"},
    song_2:{title:"title of second song",artist:"the artist",mp3:"http://mysite/song2mp3"}
    ...
};

我希望能够在值中song_1的情况下检索密钥(song_2title)。

我将循环遍历i项的临时数组,此数组中的每个项目都会在SongList中匹配,我会保存密钥(song_1,{{1在最终的数组中。

3 个答案:

答案 0 :(得分:3)

你没有数组,你有一个包含更多对象的对象。使用for in

function findTitle(title) {
    for (var key in SongList) {
        if (SongList[key].title == title) return key;
    }
    return false;
}

然后打电话给它!

findTitle("title of first song"); //returns "song_1"
findTitle("BNOT MEEEEEE"); //returns false

答案 1 :(得分:1)

这是一个例子。

var one = {
 a: {b:"MightyMouse", d:2},
 b: {b:"MickeyMouse", d:4},
 c: {b:"Superman", d:6}
};

for (outerkey in one) {
    if (one[outerkey].b === "Superman") {
         console.log ("Outerkey = " + outerkey);
    }
}

假设您正在寻找Superman,则会按预期打印c

答案 2 :(得分:1)

谢谢大家,我意识到我对Arrays v.Objects的理解是一个明显阻碍我的Google-Fu的问题。我希望可以通过这里的指导发布我最终得到的答案:

(上面讨论了SongList对象)

这是我为保存播放列表SongList的键而得到的最终功能:

$("#save_playlist_as_keys").click(function() {
var keys = []
for(var i=0; i<myPlaylist.playlist.length; i++){
   var playItem = (myPlaylist.playlist[i].title); //this returns the names of the tracks
   for (var k in SongList){
      if(SongList[k].title == playItem) keys.push(k);//this matches track name to keys
    }
}
localStorage.setItem('storedKeys',keys); 
});

这似乎正在做我想要的。