Как правильно заполнить массив данными (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, время: 01:55. |