填充数组的最简单方法?

时间:2018-11-17 10:51:05

标签: javascript

我需要创建一个数组,其元素仅取决于索引。为了弄清楚我当前的问题,我想返回所选日期的星期几。

// 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方法是什么。

2 个答案:

答案 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
}