Как отобразить массив строк в многомерный массив - PullRequest
0 голосов
/ 04 ноября 2019

Я пытаюсь создать многомерный массив путем сопоставления массива строк с двухмерным массивом.

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 вместе, чтобы получить результирующий 2D-массив, как показано выше. Я попытался сопоставить массив 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
  }))
);

1 Ответ

3 голосов
/ 04 ноября 2019

Звучит так, как будто вы хотите добавить свойство 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});
    });
});

Live Пример:

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

Live Пример:

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;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...