【问题标题】:Get value of parent object base on value from another object [closed]根据来自另一个对象的值获取父对象的值[关闭]
【发布时间】:2019-08-08 13:23:14
【问题描述】:

从 json 中,我可以根据来自另一个对象的键值获取值吗?我将如何做到这一点?使用数组过滤器还是 for 循环?

我尝试过使用数组过滤器,但它只返回整个 json 对象

这是我的 JSON 示例:

[
  {
    "type":1,
    "key": "123abc",
    "data": {
        "access": "123456"
        "data": {
          "dataValue": [
            {
              "@attr": {
                 "@key": "Fire"
              },
              "@value": "Flame"
            },
            {
              "@attr": {
                 "@key": "Water"
              },
              "@value": "Liquid"
            },
            {
              "@attr": {
                 "@key": "Earth"
              },
              "@value": "Stone"
            }
          ]
        }
     }
  }
]

我想要的是通过从“@key”中搜索“水”从@value 中获取“液体”值

输出: 液体

感谢那些愿意提供帮助的人。

【问题讨论】:

  • 别忘了添加您的尝试以供其他人协助。
  • 对不起,下次我会把我的尝试放在这里。我只是没有信心把我不工作的代码:(
  • 我将从这段代码中学习。我是编程新手,还不太了解

标签: javascript arrays json


【解决方案1】:

您可以从解析的对象中使用如下过滤器:

let obj = [{
  "type": 1,
  "key": "123abc",
  "data": {
    "access": "123456",
    "data": {
      "dataValue": [{
          "@attr": {
            "@key": "Fire"
          },
          "@value": "Flame"
        },
        {
          "@attr": {
            "@key": "Water"
          },
          "@value": "Liquid"
        },
        {
          "@attr": {
            "@key": "Earth"
          },
          "@value": "Stone"
        }
      ]
    }
  }
}];

console.log(obj[0].data.data.dataValue.filter(a => a["@attr"]["@key"] == "Water")[0]["@value"]);

【讨论】:

    【解决方案2】:

    我将稍微简化一下,并说我们正在处理 dataValue 数组。

        // For each item in dataValue, check the key.
        // If it equals 'Water', return the value.
        for (let i = 0; i < dataValue.length; i++) {
            if (value['@attr']['@key'] === 'Water') {
                return value['@value'];
            }
        }
    

    【讨论】:

      【解决方案3】:

      这会得到对象的值

      var json = JSON.parse(`[{"type":1,"key":"123abc","data":{"access":"123456","data":{"dataValue":[{"@attr":{"@key":"Fire"},"@value":"Flame"},{"@attr":{"@key":"Water"},"@value":"Liquid"},{"@attr":{"@key":"Earth"},"@value":"Stone"}]}}}]`);
      
      function getValue(dataValues, key) {
        return dataValues.find(function(item) {
          return item["@attr"]["@key"] === key;
        });
      }
      
      var dataValues = json[0].data.data.dataValue;
      var dataValue = getValue(dataValues, "Water");
      console.log(dataValue["@value"]);

      这将为您获取每个对象的值

      var json = JSON.parse(`[{"type":1,"key":"123abc","data":{"access":"123456","data":{"dataValue":[{"@attr":{"@key":"Fire"},"@value":"Flame"},{"@attr":{"@key":"Water"},"@value":"Liquid"},{"@attr":{"@key":"Earth"},"@value":"Stone"}]}}}]`);
      
      function getValue(dataValues, key) {
        return dataValues.find(function(item) {
          return item["@attr"]["@key"] === key;
        });
      }
      
      console.log(json.map(function(jsonObject) {
        return getValue(jsonObject.data.data.dataValue, "Water")["@value"];
      }));

      【讨论】:

      • 谢谢。这也有效,我将研究这段代码,如果需要,将来会使用它。这有助于我理解在嵌套 json 中查找值。我是编程新手,还不太了解
      猜你喜欢
      • 2017-08-03
      • 1970-01-01
      • 1970-01-01
      • 2020-09-17
      • 1970-01-01
      • 1970-01-01
      • 2021-07-25
      • 2022-07-07
      • 1970-01-01
      相关资源
      最近更新 更多