【问题标题】:How to find the value of a key in JSON如何在 JSON 中查找键的值
【发布时间】:2019-12-24 02:56:13
【问题描述】:

我有下面的 JSON 并且在每个对象中都有一个艺术家和图像值。我想要一种机制,当我给出艺术家的名字时,它会返回同一对象中图像的值。所有对象都以 JSON 格式在数组中变形。

var iTunes_data = $([{
    "title": "title1",
    "image": "images/image1.jpg"
  },
  {
    "title": "Hotel California [Rainwave Chiptunes]",
    "image": "images/image2.jpg"
  },
  {
    "title": "The Multi-Story Car Park [Rainwave Chiptunes]",
    "image": "images/image3.jpg"
  },
  {
    "title": "title4",
    "image": "images/image4.jpg"
  },
  {
    "title": "title5",
    "image": "images/image2.jpg"
  }
]);

function getImage(currentTitle) {
  let url =  iTunes_data.filter(element => element.title === currentTitle);
  
  return url[0].image;
}
console.log(getImage("title5"));
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>

所以当我要求title5 时,我想得到images/image2.jpg

我不想使用任何循环。它必须更多地通过找到键并获取值而不是通过循环遍历 JSON,因为我发现这种方式更快。

知道如何让它工作吗?

提前致谢

【问题讨论】:

  • $([...]) 语法用于使用 jQuery 查询 DOM 元素。
  • 您的 sn-p 不起作用,因为您正在使用 jQuery's filter 函数,并且该函数回调的第一个参数是索引而不是元素。

标签: javascript jquery json object filter


【解决方案1】:

没有办法不使用循环。如果您想提高效率,您应该使用 for 循环并使用 match 中断。

for(let obj in data) {
  if(obj.title === title)
    // match
    break
}

希望这会有所帮助。

【讨论】:

    【解决方案2】:

    要在不循环的情况下从数组中获取特定元素,您必须知道它的索引。您可以做的最好的事情是只循环一次数组以将每个标题映射到数组中元素的索引,这是一个示例:

    const arr = [{
        "title": "title1",
        "image": "images/image1.jpg"
      },
      {
        "title": "Hotel California [Rainwave Chiptunes]",
        "image": "images/image2.jpg"
      },
      {
        "title": "The Multi-Story Car Park [Rainwave Chiptunes]",
        "image": "images/image3.jpg"
      },
      {
        "title": "title4",
        "image": "images/image4.jpg"
      },
      {
        "title": "title5",
        "image": "images/image2.jpg"
      }]
    
    
    const map = arr.reduce((a, c, index) => {
      a[c.title] = index;
      return a;
    },{});
    
    function getImage(title) {
      if (!isNaN(map[title])) {
        return arr[map[title]].image;
      }
    }
    
    console.log(getImage('title5'));

    在此示例中,我使用了普通数组而不是 jQuery 对象。 我假设数组不会改变,如果你要改变数组的内容,你必须保持地图同步。

    【讨论】:

      猜你喜欢
      • 2019-01-07
      • 1970-01-01
      • 2012-12-12
      • 2020-01-20
      • 2021-12-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多