【问题标题】:How to store object values by getting the key dynamically?如何通过动态获取密钥来存储对象值?
【发布时间】:2021-06-01 15:32:35
【问题描述】:

使用以下对象数组,我如何获取每个键的值并将其保存为下面提到的所需名称和值结构格式?

{
  list: [
    [
      {
        Desc: {
          value: '7777 - Florida Hurricane'
        },
        DSTR_NR: {
          value: '7777'
        }
      },
      {
        ST_NM: {
          value: 'Alaska'
        },
        ST_CD: {
          value: 'AK'
        }
      },
      {
        Desc: {
          value: '7172 - Virginia Severe Storm(s)'
        },
        DSTR_NR: {
          value: '7172'
        }
      },
      {
        ST_NM: {
          value: 'Florida'
        },
        ST_CD: {
          value: 'FL'
        }
      },
      {
        Desc: {
          value: '7002 - Maryland Hurricane'
        },
        DSTR_NR: {
          value: '7002'
        }
      },
      {
        ST_NM: {
          value: 'Louisiana'
        },
        ST_CD: {
          value: 'LA'
        }
      }
    ]
  ]
}

无论 api 返回灾难相关数据还是状态相关数据,我都需要的所需格式。我只需要将数据值存储在名称/值对中,如下所示:

{
  list: [
    {
      name: '7777',
      value: '7777 - Florida Hurricane'
    },
    {
      name: 'AK',
      value: 'Alaska'
    },
    ...
  ]
}

这是我当前的代码:

let newData = {}
  list.forEach((value) => {
    Object.keys(value).forEach((key) => {
      if(newData[key] === undefined){
        newData[key] = [value[key]]
      } else {
        newData[key].push(value[key])
      }
    })
  });

【问题讨论】:

  • 您能提供更多数据吗?提供的数据不足以理解它所遵循的模式。
  • 您的输入符号无效:数组字面量不能有命名属性。
  • 在您的(无效)输入和所需输出之间没有明显的通用映射。
  • 我刚刚用更多数据更新了我的帖子。这就是我从后端 api 接收数据的方式。
  • 这与以前的数据有很大不同!!! @肖恩。我会放置一个指向您调用的 API 的链接,以获取准确的数据。

标签: javascript reactjs ecmascript-6


【解决方案1】:

你可以像这样映射对象

const res = {
  list: [
    [
      {
        Desc: {
          value: '7777 - Florida Hurricane'
        },
        DSTR_NR: {
          value: '7777'
        }
      },
      {
        ST_NM: {
          value: 'Alaska'
        },
        ST_CD: {
          value: 'AK'
        }
      },
      {
        Desc: {
          value: '7172 - Virginia Severe Storm(s)'
        },
        DSTR_NR: {
          value: '7172'
        }
      },
      {
        ST_NM: {
          value: 'Florida'
        },
        ST_CD: {
          value: 'FL'
        }
      },
      {
        Desc: {
          value: '7002 - Maryland Hurricane'
        },
        DSTR_NR: {
          value: '7002'
        }
      },
      {
        ST_NM: {
          value: 'Louisiana'
        },
        ST_CD: {
          value: 'LA'
        }
      }
    ]
  ]
}

const list = res.list[0];

const format = list.map(i => {
  const items = Object.values(i);
  const newItem = {}
  newItem.name = items[1].value;
  newItem.value = items[0].value;
  
  return newItem
})

console.log(format)

【讨论】:

  • 这就像一个魅力,正是我想要的。非常感谢阿雷格。
【解决方案2】:

如果数据总是首先包含值,然后包含名称,您可以这样做:

// let response = { list: [...] }
let result = {
  list: []
};

response.list.forEach(sublist => {
  sublist.forEach(elem => {
    let keys = Object.keys(elem);
    result.list.push({
      name: elem[ keys[1] ].value,
      value: elem[ keys[0] ].value,
    })
  });
})

console.log("RESULT: ", result);

【讨论】:

    猜你喜欢
    • 2015-04-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-01
    • 2016-08-11
    • 1970-01-01
    • 2020-09-10
    • 1970-01-01
    相关资源
    最近更新 更多