如何根据 TypeScript 中的条件在数组对象中创建新的 属性

How to create a new property in a array object based on a condition in TypeScript

我有以下数组对象

 arr = [
   { Name: "ABC", Age: 20},
   { Name: "XXX", Age: 15}
 ];

我想在 Typescript 中添加一个名为 "Flag" 的新 属性 作为 1,仅当 Age 大于 15 岁时。 我只是想知道我们可以为上述条件即时创建 属性 的方法是什么。

示例输出,

arr = [
   { Name: "ABC", Age: 20, Flag: 1},
   { Name: "XXX", Age: 15}
 ];

提前致谢

由于它是打字稿,我将为我的数组创建一个类型并执行如下操作:

type Array = { Name: string; Age: number; Flag?: 1 | 0 }[];
let arr: Array = [
  { Name: "ABC", Age: 20 },
  { Name: "XXX", Age: 15 }
];
arr.map(element => {
  if (element.Age > 15) {
    element.Flag = 1;
  }
});

console.log(arr);

您可以根据需要更改Flag的类型。它可以是布尔值、数字或像我一样定义的集合。

您可以使用非常简单的地图,例如:

const addFlagIfCond = (obj: {Name: string, Age: number}) => ({
  ...obj,
  ...(obj.Age > 15 ? { Flag: 1 } : {})
})

const newArr = arr.map(addFlagIfCond)

使用 class 而不是普通对象,并为标志重载 getter 以动态生成它。

class Person {
    constructor(public name: string, public age: number) {}

    get flag() {
        return this.age > 15 ? 1 : 0;
    } 
}

const person: Person = new Person('Johnny', 6);
console.log(person.flag);
// outputs 0

person.age = 20;
console.log(person.flag);
// outputs 1

使用map修改数组。

arr.map(o => { 
  if(o.Age > 15) {
    o.Flag = 1;
  }
});

这是您的对象数组

    let arr = [
       { Name: "ABC", Age: 20},
      { Name: "XXX", Age: 15}
    ];

将条件应用于所有对象的 For 循环

    for(let length=0;length<arr.length;length++)
    {
      if(arr[length].Age>15)
        arr[length]["Flag"]=1;
    }

如果您精确定义Age类型,则可以在编译时完成。打了很多字,但你对类型级别进行了全面检查。

type AgeTo15 = 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15;
type AgeAbove15 = 15 | 16 | 17 | 18 | 19 | 20 | 21; // and so on to 100 :)


// definition of two possible versions of our type
type To15Data = {
    Name: string,
    Age: AgeTo15,
}

type Above15Data = {
    Name: string,
    Age: AgeAbove15,
    Flag: number,
}

type Data = To15Data | Above15Data;

const el: Data = {
    Name: 'Name',
    Age: 10, 
} // valid

const el2: Data = {
    Name: 'Name',
    Age: 20, 
} // invalid

const el3: Data = {
    Name: 'Name',
    Age: 20, 
    Flag: 1
} // valid


const arr: Data[] = [
   { Name: "ABC", Age: 20},
   { Name: "XXX", Age: 15}
 ]; // invalid

const arr2: Data[] = [
   { Name: "ABC", Age: 20, Flag: 1},
   { Name: "XXX", Age: 15}
 ]; // valid