簡體   English   中英

一個數組仍然引用.push()之后的第二個數組 - 方法(JS / vue.js)

[英]One array still refers to a second array after .push()-method (JS/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.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);
    }
}

我希望有兩種不同的輸出。 一個帶有字符串,另一個帶有日期對象。 我得到的是兩個帶日期對象的數組。 我只是不明白為什么。

我也嘗試直接給項目(如“讓items =就業;”)而不是做推送方法,但這也沒有用。

提前致謝

你需要push()一個對象的副本。 您的對象是淺物體,因此您可以使用spread運算符來創建副本。

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

或者只是你可以做到

const items = employments.map(x => ({...x}))

您不需要創建另一個數組然后進入它。 只需在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)
                          })
                    )

    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM