【问题标题】:How to convert the array of objects to array of array with keys如何将对象数组转换为带有键的数组数组
【发布时间】:2021-02-17 21:26:54
【问题描述】:

我需要将数组对象转换为数组数组,其每个对象项的对象键如下

var inputData = [{"0":420,"10":373,"20":340,"30":313,"40":293,"50":273,"60":259,"70":243},
                 {"0":620,"10":550,"20":500,"30":460,"40":430,"50":400,"60":378,"70":355},
                 {"0":820,"10":727,"20":660,"30":607,"40":567,"50":527,"60":497,"70":467}]

对象的上述输入数据具有一组带有键的值,输出数组应如下所示。

var outputData = [[
                  [0,420],[10,373],[20,340],[30,313],[40,293],[50,273],[60,259],[70,243]
                 ],
                 [
                  [0,620],[10,550],[20,500],[30,460],[40,430],[50,400],[60,378],[70,355]
                 ],
                 [
                  [0,820],[10,727],[20,660],[30,607],[40,567],[50,527],[60,497],[70,467]
                 ]]

我为每个循环编写了一个如下代码,它在单个数组中返回整个值

var inputData = [{"0":420,"10":373,"20":340,"30":313,"40":293,"50":273,"60":259,"70":243}, {"0":620,"10":550,"20":500,"30":460,"40":430,"50":400,"60":378,"70":355},                 {"0":820,"10":727,"20":660,"30":607,"40":567,"50":527,"60":497,"70":467}];

var sp = Object.keys(inputData[0])
let outputData = []
inputData.forEach(i => {
  sp.forEach(element => {
    outputData.push([parseInt(element), i[element]])
  });
})
console.log(outputData)

【问题讨论】:

  • 我给你做了一个sn-p。我更改了 console.log(outputData)

标签: javascript node.js arrays object


【解决方案1】:

在带有Object.entries(易于填充)的现代环境中,这非常简单:您使用map 并在每个对象上使用Object.entries;然后将密钥转换为数字:

const result = inputData.map(obj => Object.entries(obj).map(([key, value]) => [+key, value]));

现场示例:

var inputData = [{"0":420,"10":373,"20":340,"30":313,"40":293,"50":273,"60":259,"70":243},
                 {"0":620,"10":550,"20":500,"30":460,"40":430,"50":400,"60":378,"70":355},
                 {"0":820,"10":727,"20":660,"30":607,"40":567,"50":527,"60":497,"70":467}];
                 
const result = inputData.map(obj => Object.entries(obj).map(([key, value]) => [+key, value]));
console.log(result);

请注意,使用一元 + 只是将字符串转换为数字的一种方法。在my answer here 中,我会介绍您的各种选择以及它们的优缺点。

【讨论】:

  • @NinaScholz - 我忘了转换密钥,但在一分钟前就做到了。
【解决方案2】:

您可以映射对象的条目并将所有值转换为数字。

var inputData = [{ 0: 420, 10: 373, 20: 340, 30: 313, 40: 293, 50: 273, 60: 259, 70: 243 }, { 0: 620, 10: 550, 20: 500, 30: 460, 40: 430, 50: 400, 60: 378, 70: 355 },{ 0: 820, 10: 727, 20: 660, 30: 607, 40: 567, 50: 527, 60: 497, 70: 467 }],
    result = inputData.map(o => Object.entries(o).map(a => a.map(Number)));

console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }

【讨论】:

    【解决方案3】:

    您可以使用Object.entries 从对象生成[key, value] 对。

    var inputData = [{"0":420,"10":373,"20":340,"30":313,"40":293,"50":273,"60":259,"70":243}, {"0":620,"10":550,"20":500,"30":460,"40":430,"50":400,"60":378,"70":355},                 {"0":820,"10":727,"20":660,"30":607,"40":567,"50":527,"60":497,"70":467}];
    
    
    const output = inputData.map((item) => Object.entries(item)).map((item) => item.map(([key, value]) => ([+key, +value])));
    console.log(output);

    【讨论】:

      猜你喜欢
      • 2019-06-20
      • 1970-01-01
      • 2016-07-05
      • 2022-01-04
      • 2010-12-24
      • 1970-01-01
      • 2019-01-14
      • 2014-01-19
      • 1970-01-01
      相关资源
      最近更新 更多