首页 > 解决方案 > 如何将字符串数组映射到多维数组

问题描述

我正在尝试通过将字符串数组映射到二维数组来创建多维数组。

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
  }))
);

标签: javascriptarraysmapping

解决方案


听起来您想添加一个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;
}


推荐阅读