Отображение data
Вы можете просто сопоставить с помощью метода .map
свой массив data
и обновить два значения объекта: owner
и others
.
Метод .map
создает новый массив с результатами вызова предоставленной функции для каждого элемента в вызывающем массиве.
- MDNвеб-документы
Обратный вызов, предоставленный .map
, может принимать несколько аргументов: здесь мы будем использовать:
currentValue: e
индекс: i
Вот код, который будет выполнять сопоставление:
const res = data.map((e,i) => {
e.owner = arrayOwner[i];
e.others = arrayOthers[i];
return e
})
Полный код:
const data = [
{name: 'Week 1', owner: 0, others: 4, amt: 4},
{name: 'Week 2', owner: 0, others: 7, amt: 7},
{name: 'Week 3', owner: 0, others: 10, amt: 10},
{name: 'Week 4', owner: 0, others: 12, amt: 12},
{name: 'Week 5', owner: 0, others: 3, amt: 3},
{name: 'Week 6', owner: 0, others: 0, amt: 0},
{name: 'Week 7', owner: 0, others: 9, amt: 9},
];
const arrayOwner = [0,0,0,0,0,0,0];
const arrayOthers = [2,4,3,6,3,8,9];
const res = data.map((e,i) => {
e.owner = arrayOwner[i];
e.others = arrayOthers[i];
return e;
})
console.log(res)
Использование цикла
На самом деле вы можете изменить data
без необходимости определения отдельного массива для получения модифицированного массива.Мы будем использовать .forEach
, данный обратный вызов будет таким же, как и ранее:
data.forEach((e,i) => {
e.owner = arrayOwner[i];
e.others = arrayOthers[i];
return e;
});
Здесь data
должен быть изменяемым, не определяйте data
с помощьюconst
.Вместо этого используйте var
или let
.
let data = [
{name: 'Week 1', owner: 0, others: 4, amt: 4},
{name: 'Week 2', owner: 0, others: 7, amt: 7},
{name: 'Week 3', owner: 0, others: 10, amt: 10},
{name: 'Week 4', owner: 0, others: 12, amt: 12},
{name: 'Week 5', owner: 0, others: 3, amt: 3},
{name: 'Week 6', owner: 0, others: 0, amt: 0},
{name: 'Week 7', owner: 0, others: 9, amt: 9},
];
const arrayOwner = [0,0,0,0,0,0,0];
const arrayOthers = [2,4,3,6,3,8,9];
data.forEach((e,i) => {
e.owner = arrayOwner[i];
e.others = arrayOthers[i];
return e;
});
console.log(data);
Примечание по структуре данных
Если вы хотите более короткую версию, вы можете установить другую структуру данных для arrayOwners
и arrayOthers
.Может быть, они находятся в одном массиве, вместо:
[arrayOwners[0], arrayOwners[1], ...]
и
[arrayOthers[0], arrayOthers[1], ...]
имеют:
[ [arrayOwners[0], arrayOthers[0]], [arrayOwners[1], arrayOthers[1]], ... ]
Итак, вы бы отобразили это так:
const res = data.map((e,i) => {
[ e.owner, e.others ] = arrayMods[i]
return e;
})
Выше я использую деструктурирующее назначение , чтобы установить e.owner
на arrayMods[i][0]
и e.others
на arrayMods[i][1]
.Что удобнее.
const data = [
{name: 'Week 1', owner: 0, others: 4, amt: 4},
{name: 'Week 2', owner: 0, others: 7, amt: 7},
{name: 'Week 3', owner: 0, others: 10, amt: 10},
{name: 'Week 4', owner: 0, others: 12, amt: 12},
{name: 'Week 5', owner: 0, others: 3, amt: 3},
{name: 'Week 6', owner: 0, others: 0, amt: 0},
{name: 'Week 7', owner: 0, others: 9, amt: 9},
];
const arrayMods = [[0,2],[0,4],[0,3],[0,6],[0,3],[0,8],[0,0]];
const res = data.map((e,i) => {
[ e.owner, e.others ] = arrayMods[i]
return e;
})
console.log(res)