javascript - 如何将字符串数组映射到多维数组
问题描述
我正在尝试通过将字符串数组映射到二维数组来创建多维数组。
var dataFieldArray = ["LegPenetration", "Temperature"];
var multidimensionalArray = [[{"x": 0, "y": 0}, {"x": 10, "y": 20}, {"x": 20, "y": 30}, {"x": 30, "y": 40}, {"x": 40, "y": 50}],
[{"x": 0, "y": 0}, {"x": 10, "y": 200}, {"x": 20, "y": 250}, {"x": 30, "y": 400}, {"x": 40, "y": 450}]]
预期输出应如下所示:
var data = [[{"field": LegPenetration, "x": 0, "y": 0}, {"field": LegPenetration, "x": 10, "y": 20}, {"field": LegPenetration, "x": 20, "y": 30}, {"field": LegPenetration, "x": 30, "y": 40}, {"field": LegPenetration, "x": 40, "y": 50}],
[{"field": Temperature, "x": 0, "y": 0}, {"field": Temperature, "x": 10, "y": 200}, {"field": Temperature, "x": 20, "y": 250}, {"field": Temperature, "x": 30, "y": 400}, {"field": Temperature, "x": 40, "y": 450}]]
在下面的代码中,我将 xValueArray 和 yValueArray 映射在一起以获得如上所示的结果二维数组。我尝试以相同的方式映射 dataField 数组,但无济于事。任何帮助是极大的赞赏!
const yValueArray = [[0, 20, 30, 40, 50], [0, 200, 250, 400, 450]];
const xValueArray = [0, 10, 20, 30, 40];
const data = yValueArray.map(data =>
data.map((d, i) => ({
x: xValueArray[i],
y: d
}))
);
解决方案
听起来您想添加一个field
属性。这是一种不修改原始对象的方法,仅使用 ES5 级语言功能和Object.assign
(ES2015,但可填充):
var result = multidimensionalArray.map(function(array, index) {
var field = dataFieldArray[index];
return array.map(function(object) {
return Object.assign({}, object, {field: field});
});
});
现场示例:
var dataFieldArray = ["LegPenetration", "Temperature"];
var multidimensionalArray = [[{"x": 0, "y": 0}, {"x": 10, "y": 20}, {"x": 20, "y": 30}, {"x": 30, "y": 40}, {"x": 40, "y": 50}],
[{"x": 0, "y": 0}, {"x": 10, "y": 200}, {"x": 20, "y": 250}, {"x": 30, "y": 400}, {"x": 40, "y": 450}]];
var result = multidimensionalArray.map(function(array, index) {
var field = dataFieldArray[index];
return array.map(function(object) {
return Object.assign({}, object, {field: field});
});
});
console.log(result);
.as-console-wrapper {
max-height: 100% !important;
}
或者使用 ES2015 和 ES2018 功能:
const result = multidimensionalArray.map((array, index) =>
array.map(object => ({...object, field: dataFieldArray[index]}))
);
现场示例:
const dataFieldArray = ["LegPenetration", "Temperature"];
const multidimensionalArray = [[{"x": 0, "y": 0}, {"x": 10, "y": 20}, {"x": 20, "y": 30}, {"x": 30, "y": 40}, {"x": 40, "y": 50}],
[{"x": 0, "y": 0}, {"x": 10, "y": 200}, {"x": 20, "y": 250}, {"x": 30, "y": 400}, {"x": 40, "y": 450}]];
const result = multidimensionalArray.map((array, index) =>
array.map(object => ({...object, field: dataFieldArray[index]}))
);
console.log(result);
.as-console-wrapper {
max-height: 100% !important;
}
推荐阅读
- android - 从 Google Play 商店获取评论
- javascript - 使用 JavaScript 执行操作系统命令?
- sql-server - 从 CosmosDB 读取并写入 Azure SQL
- testing - 从命令行运行空手道测试会返回 surefire-plugin 错误
- c# - 如何增加工具提示矩形大小
- c - 将指向较大数组的指针分配给指向较小 VLA 的指针
- webpack - Nativescript webpack 捆绑全局变量
- encryption - 在 Inno Setup 中对字符串进行编码并将值保存到文件中
- filesystems - 使用 fdisk 更改分区会显示类似“partition#x contains ext4-signature”的警告
- html - RadioField 永远不会正确验证