Как правильно заполнить массив данными (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: '-'] |
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);
});
|
Большое спасибо за помощь.
|
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);
});
|
рони, с fill надыть осторожно, вдруг он значение в поменять захочет внутри объекта.
|
Aetae,
ок. |
:write:
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);
});
|
| Часовой пояс GMT +3, время: 05:34. |