el: "#app",
data: {
songs : {
songNames: [{holiday:'mp3/01.mp3'}, {loveme:'mp3/02.mp3'}, {byebye:'mp3/03.mp3'}],
}
songCheck: ['byebye'],
foundSong: new Audio (" "),
你好, 我想通过检查songCheck Array项目并从返回的“ mp3 / 03.mp3”分配给变量,像这样从songNames Array中获取值“ mp3 / 03.mp3”:
foundSong: new Audio ("mp3/03.mp3 "),
然后
this.foundSong.play();
请帮助我。谢谢
答案 0 :(得分:1)
虽然我不了解您想要的所有内容,但也许此片段将帮助您解决问题:
const songNames = [{holiday:'mp3/01.mp3'}, {loveme:'mp3/02.mp3'}, {byebye:'mp3/03.mp3'}];
// 1. Key you are looking for
const searchKey = "byebye";
// 2. Find object we are looking for
// - .find loops over all songNames objects
// - for each object we check if it has property we are looking for i.e. "byebye"
// - first object that match criteria is returned or undefined if there are no matches
const searchResult = songNames.find(song => song.hasOwnProperty(searchKey));
// 3. Get desired value from object
console.log(searchResult && searchResult[searchKey]); // will return "mp3/03.mp3" in our case where searchKey is "byebye"
答案 1 :(得分:1)
这不漂亮,但这是我想出的:
var data = {
songs : {
songNames: [
{holiday:'mp3/01.mp3'},
{loveme:'mp3/02.mp3'},
{byebye:'mp3/03.mp3'}
]
},
songCheck: ['byebye'],
foundSong: ""
};
for (var i = 0; i < data.songs.songNames.length; i++)
{
console.log(data.songs.songNames[i]);
if (data.songs.songNames[i][data.songCheck[0]] != undefined)
{
data.foundSong = data.songs.songNames[i][data.songCheck[0]];
break;
}
}
console.log(data.foundSong);
我没有Audio
对象,所以我不能使用它,但这只是一个小小的变化。
我实际上建议的是,如果您具有权限/访问权或可以说服确实拥有权限/访问权的人,则可以稍微更改数据结构。为您的songNames
对象提供不同的结构,例如实际对象。
{
name: "holiday",
filename: "mp3/01.mp3"
}
然后将songCheck
还原为简单字符串。这两个建议都消除了一些额外的复杂性,您不必依靠奇怪的行为,这比任何事情都更容易被黑客接受。在这种情况下,使用对象键检查undefined
值不是很好。例如,如果某人想要稍后更改数据结构,则无论如何都必须稍后更改此代码,并且在发生这种情况时将很难找到它。
进一步考虑这一点,按照您的原始方式执行操作可能很有意义,但是当您精简此问题时却没有任何意义,所以我想一点点的建议。
顺便说一句,我在上面的代码中做了一些空检查,这是我遗漏的。