Javascript 有没有办法通过对象的键从对象中获取值?
你好,, 我想通过选中songCheck数组项并将返回的“mp3/03.mp3”分配给变量,从songNames数组中获取值“mp3/03.mp3”,如下所示:Javascript 有没有办法通过对象的键从对象中获取值?,javascript,vue.js,Javascript,Vue.js,你好,, 我想通过选中songCheck数组项并将返回的“mp3/03.mp3”分配给变量,从songNames数组中获取值“mp3/03.mp3”,如下所示: el: "#app", data: { songs : { songNames: [{holiday:'mp3/01.mp3'}, {loveme:'mp3/02.mp3'}, {byebye:'mp3/03.mp3'}], } songCheck: ['byebye'], foundSon
el: "#app",
data: {
songs : {
songNames: [{holiday:'mp3/01.mp3'}, {loveme:'mp3/02.mp3'}, {byebye:'mp3/03.mp3'}],
}
songCheck: ['byebye'],
foundSong: new Audio (" "),
然后
请帮帮我。谢谢你虽然我不完全理解你想要的一切,但也许这段代码可以帮助你解决你的问题:
constsongnames=[{holiday:'mp3/01.mp3'},{loveme:'mp3/02.mp3'},{byebye:'mp3/03.mp3'}];
// 1. 你要找的钥匙
const searchKey=“byebye”;
// 2. 找到我们要找的对象
//-.查找所有songNames对象上的循环
//-对于每个对象,我们检查其是否具有我们正在寻找的属性,即“byebye”
//-如果没有匹配项,则返回或未定义匹配条件的第一个对象
const searchResult=songNames.find(song=>song.hasOwnProperty(searchKey));
// 3. 从对象获取所需的值
console.log(searchResult&&searchResult[searchKey]);//在搜索键为“byebye”的情况下,将返回“mp3/03.mp3”
这并不漂亮,但我想到了以下几点:
this.foundSong.play();
然后将songCheck
还原为一个简单字符串。这两种建议都可以消除一些额外的复杂性,而且你不必依赖奇怪的行为,这更像是一种黑客行为。在这种情况下,在使用对象键时检查未定义的值并不好。例如,如果有人想在以后更改数据结构,无论如何,您都必须在以后更改此代码,并且在发生此情况时很难找到此代码
进一步考虑这个问题,在您的原始代码中按您的方式执行可能是有意义的,但是在这个问题上,如果将其剥离,则没有意义,因此我想您应该对这个建议持保留态度
顺便说一句,在上面的代码中,您应该执行一些空检查,我已经忽略了。谢谢,它在我当前的结构中起作用,但在您推荐的结构中不起作用。为了使用{name:“holiday”,文件名:“mp3/01.mp3”}@Fereydoon,将if(data.songs.songNames[i][data.songCheck[0]!=未定义)
更改为if(data.songs.songNames[i].name==data.songCheck[0])
。如果您不知道如何使用对象,请查看。您可能还希望通过使用toLowerCase或toUpperCase使其不区分大小写。非常感谢,这是有效的,也是一个简短的解决方案。
this.foundSong.play();
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);
{
name: "holiday",
filename: "mp3/01.mp3"
}