#javascript
Вопрос:
Возможно ли это?
Я хочу создавать непрерывные объектные данные.
- чего я хочу
return [ { text: '2', align: 'center', value: '2', sort: false }, { text: '3', align: 'center', value: '3', sort: false }, { text: '4', align: 'center', value: '4', sort: false }, { text: '5', align: 'center', value: '5', sort: false }, { text: '6', align: 'center', value: '6', sort: false }, { text: '7', align: 'center', value: '7', sort: false }, { text: '8', align: 'center', value: '8', sort: false }, ]
- мое мнение
return [ () => { for (let i = 0; i >= 8; i ) { return { text: i, align: 'center', value: i >= 10 ? `day${i}` : `day0${i}`, sort: false, } } }, ]
Но это, конечно, не сработало. Как я могу сделать это таким образом?
Комментарии:
1. Создайте массив в цикле, а затем верните его
2. Ваш цикл for также проблематичен: вы имеете в виду
i <= 35
? Это не вопрос, специфичный для Vue, а скорее общий вопрос JS.
Ответ №1:
Вы можете сделать это, заполнив пустой массив из любого количества элементов, которые вы хотите, а затем используя map
и индекс каждого пустого элемента:
const result = new Array(35).fill(0).map((_, i) => ({
text: i,
align: 'center',
value: i >= 10 ? `day${i}` : `day0${i}`,
sort: false,
}));
console.log(result);
Ответ №2:
Вы можете объявить небольшую вспомогательную функцию, которая вызывает функцию для (отображения) заданного диапазона целых чисел, например:
function mapRange(min, max, fn) {
const out = [];
for (let i = min; i < max; i ) {
out.push(fn(i));
}
return out;
}
Тогда вы можете просто
const result = mapRange(0, 35, (i) => ({
text: i,
align: 'center',
value: i >= 10 ? `day${i}` : `day0${i}`,
sort: false,
}));
(Согласно тесту JSBench, это примерно на 20% быстрее, чем аналогичное решение Jamiec, использующее new Array().fill().map()
идиому.)
Комментарии:
1. …и без дополнительного вызова функции (т. Е. простого цикла, заполняющего массив) это было бы еще быстрее. К чему ты клонишь? в любом массиве, меньшем, чем по крайней мере несколько сотен тысяч записей, мы говорим о разнице в наносекундах
2. Что, если вам нужна идиома, похожая на карту, это немного быстрее 🙂
Ответ №3:
Другие ответы слишком длинные… бесполезно… Попробуй
[...Array(7)].map((_, i) => ({ text: `${i 2}`, align: 'center', value: `${i 2}`, sort: false }));
Комментарии:
1. самый короткий код не всегда является самым простым для чтения кодом