Есть ли способ инициализировать массив в JavaScript ES6?
Я, наконец, сдался и написал цикл for
чтобы инициализировать простой массив объектов, где каждый объект имеет увеличенный счетчик (id
) как атрибут объекта. Другими словами, я просто хочу:
var sampleData = [{id: 1},{id: 2},...];
Я надеялся на компактный синтаксис, который я мог бы просто добавить в свой оператор return.
let sampleData = [];
for (var p = 0; p < 25; p++){
sampleData.push({id: p});
}
return {
data: sampleData,
isLoading: true
};
Ответы
Ответ 1
Array.from()
- хороший способ сделать это. Вы можете передать объект {length: somlength}
или некоторый другой объект в виде массива и функцию, которая определяет каждый элемент. Первым аргументом (вызывая его _
только для того, чтобы указать, что он не используется) этой функции будет элемент из массива, который мы передали (но мы передали только длину, поэтому это ничего не значит), второй i
- индекс, который используется для вашего id
:
let sampleData = Array.from({length: 10}, (_, id) => ({id}))
console.log(sampleData)
Ответ 2
Обычно я делаю так:
const data = Array(10).fill().map((v, i) => ({id: i + 1}))
fill
гарантирует, что он может использоваться с map
Ответ 3
Вы можете использовать оператор с spread
с Array
а затем сопоставить каждый undefined
элемент с нужным объектом.
var arr = [...Array(10)].map((_,i)=>({id:i}));
console.log(arr)
Ответ 4
Вы ищете анаморфизм или обратную складку -
// unfold : ((r, state) -> List r, unit -> List r, state) -> List r
const unfold = (f, init) =>
f ( (x, next) => [ x, ...unfold (f, next) ]
, () => []
, init
)
// sampleData : List { id: Int }
const sampleData =
unfold
( (next, done, i) =>
i > 25
? done ()
: next ({ id: i }, i + 1)
, 0
)
console .log (sampleData)
// [ { id: 0 }, { id : 1 }, ... { id: 25 } ]
Ответ 5
.from()
отличный, но если вы действительно хотите получить креатив, проверьте это.
const newArray = length => [...'${Math.pow(10, length) - 1}']
newArray(2)
newArray(10)
Массивно ограничено, хотя
newArray(1000)
["I", "n", "f", "i", "n", "i", "t", "y"]
Ответ 6
Для этого вы можете использовать простой рекурсивный процесс.
const iter = (arr, counter) => {
if (counter === 25) return arr;
return iter([...arr, {id:counter}], counter + 1)
}
iter([], 0)