【问题标题】:is there a way to grab a value from an object via its key?有没有办法通过对象的键从对象中获取值?
【发布时间】:2020-11-09 20:31:47
【问题描述】:
el: "#app",
data: {

songs : { 

songNames: [{holiday:'mp3/01.mp3'}, {loveme:'mp3/02.mp3'}, {byebye:'mp3/03.mp3'}],

        }

songCheck: ['byebye'],
foundSong: new Audio (" "),

你好, 我想从 songNames 数组中获取值“mp3/03.mp3”,方法是检查 songCheck 数组项并将返回的“mp3/03.mp3”分配给如下变量:

foundSong: new Audio ("mp3/03.mp3 "), 

然后

this.foundSong.play();

请帮助我。谢谢

【问题讨论】:

    标签: javascript vue.js


    【解决方案1】:

    虽然我不明白你想要的一切,但也许这个 sn-p 会帮助你解决你的问题:

    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"

    【讨论】:

    • 非常感谢,它奏效了,也是一个简短的解决方案。
    【解决方案2】:

    这不是很漂亮,但这是我想出的:

    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 值并不好。例如,如果有人以后要更改数据结构,那么无论如何您都必须稍后更改此代码,并且当它发生时,将很难找到此代码。

    进一步考虑这一点,在您的原始代码中以您的方式执行它可能是有意义的,但在针对这个问题进行精简时没有意义,所以我想对这个建议持保留态度。

    顺便说一句,您应该在上面的代码中进行一些空值检查,但我忽略了。

    【讨论】:

    猜你喜欢
    • 2022-01-07
    • 2014-04-19
    • 1970-01-01
    • 2017-02-03
    • 2016-10-05
    • 1970-01-01
    • 2017-10-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多