Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vue.js/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 有没有办法通过对象的键从对象中获取值?_Javascript_Vue.js - Fatal编程技术网

Javascript 有没有办法通过对象的键从对象中获取值?

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

你好,, 我想通过选中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'],
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"
}