我需要创建一个数组,其元素仅取决于索引。为了弄清楚我当前的问题,我想返回所选日期的星期几。
// With for
const getWeekDatesFor = day => {
const dayIndex = moment(day).format('E') - 1;
const dates = [];
for(let i = 0; i < 7; i++){
if(i < dayIndex){
const lessWith = dayIndex - i;
dates[i] = moment(day).subtract(lessWith, "d").format('YYYY-M-D')
} else {
const moreWith = i - dayIndex;
dates[i] = moment(day).add(moreWith, "d").format('YYYY-M-D')
}
}
return dates
}
// How I wanted to simplify (but returns empty array with 7 elements)
const getWeekDatesNew = day => {
const dayIndex = moment(day).format('E') - 1;
return Array(7).map((e, i) => {
if(i < dayIndex){
const lessWith = dayIndex - i;
return moment(day).subtract(lessWith, "d").format('YYYY-M-D')
} else {
const moreWith = i - dayIndex;
return moment(day).add(moreWith, "d").format('YYYY-M-D')
}
})
}
For循环很好,但是我敢肯定,使用ES6,我们有一种更简单的方法来执行这些操作:创建一个数组,其中的项取决于它的索引。我只想知道执行此操作的ES6方法是什么。
答案 0 :(得分:3)
最简单的方法是像这样使用array.from和new数组的组合:
Array.from(new Array(5), (und, ind) => ind) // This returns [0,1,2,3,4]
und是未定义的,因为数组是用未定义的值初始化的,需要填充。 因此,您可以通过更复杂的评估来扩展它:
Array.from(new Array(5), (und, ind) => {return some_data_based_on_ind})
还有用于简单填充的Array.fill方法:
Array(6).fill('somedata')
答案 1 :(得分:0)
只需将其放入数据变量即可。我用date-fns
代替了瞬间
const daysOfWeek = () => {
const days = []
let startDate = dateFns.startOfWeek(new Date())
for (let i = 0; i < 7; i++) {
days.push(
<span key={i}>
{ dateFns.format(dateFns.addDays(startDate, i), 'dddd') }
</span>
)
}
return days
}