網站搜尋

Typescript 類別陣列按值賦值


如何按值而不是按引用來分配 TypeScript 類對象數組。下面是代碼

class Person {
    constructor(public Name: string, public Age: number) {
    }
}

let orignalArr: Person[] = [
    new Person('Gyan', 28),
    new Person('Parkash', 28),
];
let arr2 = orignalArr;    
//let arr2 = orignalArr.slice(0); i tried this but not working
arr2[0].Name = 'changed';
console.log(orignalArr);
//logs 0: Person {Name: "changed", Age: 28} 1: Person {Name: "Parkash", Age:
//  28}

console.log(arr2);
//logs 0: Person {Name: "changed", Age: 28} 1: Person {Name: "Parkash", Age:
//  28}

所以我需要的是原始陣列的值不被改變。

答案#1

slice 不會起作用,因為你的項目也是引用類型,它只會返回引用的複製。

你可以使用 map 函數來迭代陣列項目,然後使用 Object.assign,你可以將每個物件的屬性複製到新的物件中。

這個範例是用 Javascript 提供的。

class Person {
    constructor(name, age) {
       this.name = name;
       this.age = age;
    }
}

let originalArr = [
    new Person('Gyan', 28),
    new Person('Parkash', 28),
];

let arr2 = originalArr.map(item => Object.assign({}, item));
arr2[0].name = 'Changed';

console.log(originalArr[0]);
console.log(arr2[0]);