Javascript 一个数组仍然引用.push()方法(JS/vue.JS)之后的第二个数组

Javascript 一个数组仍然引用.push()方法(JS/vue.JS)之后的第二个数组,javascript,arrays,vue.js,Javascript,Arrays,Vue.js,我想用两个数组填充日期。第一个应具有字符串格式的日期,第二个应与日期对象的日期相同 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.

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

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);
    }
}
方法:{
测试(){
让就业=[
{开始:'01.01.2000',结束:'01.01.2010'},
{开始:'01.01.3000',结束:'01.01.3010'},
{开始:'01.01.4000',结束:'01.01.4010'}
];
设项目=[];
for(设i=0;i
我希望有两种不同的输出。一个包含字符串,另一个包含日期对象。取而代之的是两个带有日期对象的数组。我就是不明白为什么

我还尝试直接将employments赋予项(比如“let items=employments;”),而不是使用push方法,但这也不起作用

提前感谢

您需要
推送()
对象的副本。对象是浅层对象,因此可以使用“排列”操作符创建副本

for(let i = 0; i <  employments.length; i++) {
     items.push({...employments[i]});
}
您不需要创建另一个数组,然后将其推入其中。只需在
employments
上使用
map()。此外,还可以使用单独的函数创建
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)
                          })
                    )

    }
}

您正在将引用推送到对象,而不是对象本身。您可能想要克隆对象。当您执行
items.push(employments[i]),使两个数组中的项成为相同的项--它们是引用同一对象的不同数组。可以尝试
items.push(Object.assign({},employments[i])
或查看
数组。映射
可能的副本,请参见@HereticMonkey,我会这样做。但是您提到的问题没有使用
push()
,它的字符串数组不是对象数组。第一个答案提供的解决方案不适用于本案例。因为对象的数组需要被深深地复制,然后考虑它是一个挑战,以找到一个更适用的副本。我确信关于堆栈溢出的这个主题有很多问题。
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)
                          })
                    )

    }
}