我想要两个充满日期的数组。第一个应具有字符串格式的日期,第二个应与日期对象具有相同的日期。

methods: {
    test() {
        let employments = [
            { begin: '01.01.2000', end: '01.01.2010' },
            { begin: '01.01.3000', end: '01.01.3010' },
            { begin: '01.01.4000', end: '01.01.4010' }
        ];
        let items = [];
        for(let i = 0; i <  employments.length; i++) {
            items.push(employments[i]);
        }
        for(let i = 0; i < items.length; i++ ) {
            // splitting it up for the correct format
            let begin = items[i].begin.split('.').reverse().join('-');
            let end = items[i].end.split('.').reverse().join('-');
            items[i].begin = new Date(begin);
            items[i].end = new Date(end);
        }
        console.log('items:');
        console.log(items);
        console.log('this.employments:');
        console.log(employments);
    }
}

我期望有两个不同的输出。一个带有字符串,另一个带有日期对象。我得到的是带有日期对象的两个数组。我就是不明白为什么。

我还尝试了直接给项目提供就业机会(例如“让项目=就业机会;”),而不是采用推送方法,但这也不起作用。

提前致谢

最佳答案

您需要push()对象的副本。您的对象是浅对象,因此可以使用散布运算符创建副本。

for(let i = 0; i <  employments.length; i++) {
     items.push({...employments[i]});
}

或者您可以做到
const items = employments.map(x => ({...x}))

您无需创建另一个数组,然后将其推入。只需在map()上使用employments并更改两个属性即可。此外,使用单独的函数来创建Date对象。
methods: {
    test() {
        let employments = [
            { begin: '01.01.2000', end: '01.01.2010' },
            { begin: '01.01.3000', end: '01.01.3010' },
            { begin: '01.01.4000', end: '01.01.4010' }
        ];
        const format = str => new Date(str.split('.').reverse().join('-'));

        let items = employments.map(({end,start}) =>
                          ({
                              end: format(end),
                              start:format(start)
                          })
                    )

    }
}

10-08 13:11
查看更多