首页 > 解决方案 > 使用我想设置为键的动态生成和预定义的项目数组将多维数组转换为对象

问题描述

我为解决此问题而采取的步骤是否正确?

我正在研究转换数组数组的数据结构,例如

this.arrayofAnimalsAndValues = [
  [ "Ant", 1287, 12956],
  [ "Lion", 2574, 25826],
  [ "Bear", 3861, 38696],
  .....
]

进入这个

this.jsonOfAnimalsAndValues = [
  {category: "Ant", value_1: 1287, value_2:12956},
  {category: "Lion", value_1: 2574, value_2:25826},
  {category: "Bear", value_1: 3861, value_2:38696},
  .....
]

其中数组中的第一项始终分配给数组对象中的“类别”,以下各项根据它们在数组中的顺序分配给 value_#。所以第二个数组项将有键 value_1 等等。例如,对于 1 个嵌套数组:

[[ "Ant", 5148, 51566]] to =>
[{category: "Ant", value_1: "5148", value_2: 51566}]

我已经创建了一种硬编码的方式来实现这一点,但是我正在尝试使其动态化:

“硬编码”方式:

this.variableOfKeys = ["value_1", "value_2", "value_3", ......]

this.jsonOfAnimalsAndValues = this.arrayofAnimalsAndValues(function(x) { 
    return { 
       category: x[0], 
       no1: x[1],
       no2: x[2],
       .....
    }; 
});

我只是硬编码键和它们的值(使用它们的索引的值)。

我尝试使其动态化:

      this.variableOfKeys.forEach(element => {
        this.jsonOfAnimalsAndValues = this.arrayofAnimalsAndValues.map(function(x) { 
          for (var i = 0; i<=this.arrayOfValuesToUseAsKeys.length; ++i) {
            return { 
              category: x[0], 
              element: x[i+1],
            }; 
          }
        });
      });

我的逻辑是对于每个项目

this.variableOfKeys = ["value_1", "value_2", "value_3", ......],

我创建了 this.jsonOfAnimalsAndValues 以便将数组 this.arrayofAnimalsAndValues 中的第一项(索引为第 0 的项)分配给键类别,并将以下项(取决于它们的索引)按顺序分配给 this.variableOfKeys 中的值从 no1 开始,然后是 no2 等。

但是,我认为这写得不正确,并且我不断收到此错误:

"TypeError: Cannot read property 'variableOfKeys' of undefined"

我可以问一下它是如何写错的,那么我如何能够从 this.arrayofAnimalsAndValues 创建 this.jsonOfAnimalsAndValues?

标签: javascriptarraysjsonfor-loop

解决方案


您可以将每个子数组映射到一个条目数组,然后将其转换为一个对象以返回Object.fromEntries

const arrayofAnimalsAndValues = [
  [ "Ant", 1287, 12956],
  [ "Lion", 2574, 25826],
  [ "Bear", 3861, 38696],
];
const output = arrayofAnimalsAndValues.map(
  ([category, ...rest]) => Object.fromEntries([
    ['category', category],
    ...rest.map((value, i) => ['value_' + (i + 1), value])
  ])
);
console.log(output);


推荐阅读