我已经搜索过,发现了一些相似但不完全的答案。
我有一个数组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_2
或title
)。
我将循环遍历i
项的临时数组,此数组中的每个项目都会在SongList
中匹配,我会保存密钥(song_1
,{{1在最终的数组中。
答案 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);
});
这似乎正在做我想要的。