javascript - 使用我想设置为键的动态生成和预定义的项目数组将多维数组转换为对象
问题描述
我为解决此问题而采取的步骤是否正确?
我正在研究转换数组数组的数据结构,例如
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?
解决方案
您可以将每个子数组映射到一个条目数组,然后将其转换为一个对象以返回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);
推荐阅读
- java - java opencv GLIBC_2.14 未找到
- python - 环境变量存在于bash中但不存在于python中
- pyspark - Pyspark 中的 AggregateByKey 没有给出预期的输出
- python - 需要修改版本的 Python 字典
- html - CSS X 溢出留下空白
- windows - 为什么 Spy++ 看不到发送到 UWP 应用的消息?
- gradle - 使用 Java 9/10 和 Gradle 的 Kotlin DSL 构建 Gradle Kotlin 项目
- async-await - 如何使用 vue + axios 在获取请求中使用 async / await?
- javascript - Ext JS 6.5 菜单自动隐藏
- python - Matplotlib 画布作为 numpy 数组伪影