17.01.2019, 18:33
|
Профессор
|
|
Регистрация: 12.08.2015
Сообщений: 206
|
|
Как правильно заполнить массив данными (native javascript)?
Здравствуйте. Подскажите, пожалуйста, как правильно решить следующую задачу. У меня есть некая структура данных.
const data = [
{
locations: [
{
locationId: 0,
players: [
{
holes: [
{
holeId: 1,
score: 5
},
{
holeId: 2,
score: 5
},
{
holeId: 3,
score: 5
},
{
holeId: 4,
score: 5
}
],
firstName: "firstName 1",
lastName: "lastName 1"
},
{
holes: [
{
holeId: 1,
score: 5
},
{
holeId: 2,
score: 5
}
],
firstName: "firstName 2",
lastName: "lastName 2"
},
{
holes: [
{
holeId: 1,
score: 5
}
],
firstName: "firstName 3",
lastName: "lastName 3"
}
]
}
]
}
]
const players = data[0].locations[0].players;
players.forEach((item) => {
console.log(item.holes);
// [{...}, {...}, {...}, {...}]
// 0: {holeId: 1, score: 5]
// 1: {holeId: 2, score: 5]
// 2: {holeId: 3, score: 5]
// 3: {holeId: 4, score: 5]
// [{...}, {...}]
// 0: {holeId: 1, score: 5]
// 1: {holeId: 2, score: 5]
// [{...}]
// 0: {holeId: 1, score: 5]
});
Мне необходимо сделать следующее: players может быть любое количество, и длина массива item.holes может быть различная. Мне необходимо, чтобы в массивы ориентировались по самому большому, и в случае, если их длина меньше, они заполнялись по следующему принципу. Например, у самого большого массива длина 4:
// [{...}, {...}, {...}, {...}]
// 0: {holeId: 1, score: 5]
// 1: {holeId: 2, score: 5]
// 2: {holeId: 3, score: 5]
// 3: {holeId: 4, score: 5]
А у остальных меньше, и необходимо, чтобы произошло следующее заполнение:
// например array номер 2
// [{...},{...}] // его длина изначально
// после преобразований
// 0: {holeId: 1, score: 5]
// 0: {holeId: 2, score: 5]
// 2: {score: '-']
// 3: { score: '-']
// например array номер 3
// [{...}] // его длина изначально
// после преобразований
// 0: {holeId: 1, score: 5]
// 1: {score: '-']
// 2: {score: '-']
// 3: { score: '-']
|
|
17.01.2019, 19:11
|
|
Профессор
|
|
Регистрация: 27.05.2010
Сообщений: 33,121
|
|
s24344,
const data = [
{
locations: [
{
locationId: 0,
players: [
{
holes: [
{
holeId: 1,
score: 5
},
{
holeId: 2,
score: 5
},
{
holeId: 3,
score: 5
},
{
holeId: 4,
score: 5
}
],
firstName: "firstName 1",
lastName: "lastName 1"
},
{
holes: [
{
holeId: 1,
score: 5
},
{
holeId: 2,
score: 5
}
],
firstName: "firstName 2",
lastName: "lastName 2"
},
{
holes: [
{
holeId: 1,
score: 5
}
],
firstName: "firstName 3",
lastName: "lastName 3"
}
]
}
]
}
]
const players = data[0].locations[0].players;
const length = players.reduce((max, item) => {
const {length} = item.holes;
return Math.max(max,length);
},0);
const arr = Array.from(new Array(length), () => ({score: '-'}));
players.forEach((item) => {
item.holes = Object.assign([], arr, item.holes)
console.log(item.holes);
});
|
|
17.01.2019, 19:13
|
Профессор
|
|
Регистрация: 12.08.2015
Сообщений: 206
|
|
Большое спасибо за помощь.
|
|
17.01.2019, 19:26
|
|
Профессор
|
|
Регистрация: 27.05.2010
Сообщений: 33,121
|
|
s24344,
const data = [
{
locations: [
{
locationId: 0,
players: [
{
holes: [
{
holeId: 1,
score: 5
},
{
holeId: 2,
score: 5
},
{
holeId: 3,
score: 5
},
{
holeId: 4,
score: 5
}
],
firstName: "firstName 1",
lastName: "lastName 1"
},
{
holes: [
{
holeId: 1,
score: 5
},
{
holeId: 2,
score: 5
}
],
firstName: "firstName 2",
lastName: "lastName 2"
},
{
holes: [
{
holeId: 1,
score: 5
}
],
firstName: "firstName 3",
lastName: "lastName 3"
}
]
}
]
}
]
const players = data[0].locations[0].players;
const length = players.reduce((max, item) => {
const {length} = item.holes;
return Math.max(max,length);
},0);
players.forEach((item) => {
const len = item.holes.length;
item.holes.length = length;
item.holes.fill({score: '-'}, len, length)
console.log(item.holes);
});
|
|
17.01.2019, 20:20
|
|
Тлен
|
|
Регистрация: 02.01.2010
Сообщений: 6,588
|
|
рони, с fill надыть осторожно, вдруг он значение в поменять захочет внутри объекта.
__________________
29375, 35
|
|
17.01.2019, 20:53
|
|
Профессор
|
|
Регистрация: 27.05.2010
Сообщений: 33,121
|
|
Aetae,
ок.
|
|
17.01.2019, 21:00
|
|
Профессор
|
|
Регистрация: 27.05.2010
Сообщений: 33,121
|
|
const data = [
{
locations: [
{
locationId: 0,
players: [
{
holes: [
{
holeId: 1,
score: 5
},
{
holeId: 2,
score: 5
},
{
holeId: 3,
score: 5
},
{
holeId: 4,
score: 5
}
],
firstName: "firstName 1",
lastName: "lastName 1"
},
{
holes: [
{
holeId: 1,
score: 5
},
{
holeId: 2,
score: 5
}
],
firstName: "firstName 2",
lastName: "lastName 2"
},
{
holes: [
{
holeId: 1,
score: 5
}
],
firstName: "firstName 3",
lastName: "lastName 3"
}
]
}
]
}
]
const players = data[0].locations[0].players;
const length = players.reduce((max, item) => {
const {length} = item.holes;
return Math.max(max,length);
},0);
const arr = Array.from(new Array(length), () => ({score: '-'}));
players.forEach((item) => {
item.holes.push(...arr.slice(0));
item.holes.length = length
console.log(item.holes);
});
|
|
|
|