Javascript 如何基于TypeScript中的条件在数组对象中创建新属性

Javascript 如何基于TypeScript中的条件在数组对象中创建新属性,javascript,typescript,object,arrayobject,Javascript,Typescript,Object,Arrayobject,我有下面的数组对象 arr = [ { Name: "ABC", Age: 20}, { Name: "XXX", Age: 15} ]; 我想添加一个名为“Flag”的新属性,仅当Typescript中的年龄大于15时才将其设置为1。 我只是想知道我们可以用什么方法动态地为上述条件创建属性 class Person { constructor(public name: string, public age: number) {} get flag() {

我有下面的数组对象

 arr = [
   { Name: "ABC", Age: 20},
   { Name: "XXX", Age: 15}
 ];
我想添加一个名为“Flag”的新属性,仅当Typescript中的年龄大于15时才将其设置为1。 我只是想知道我们可以用什么方法动态地为上述条件创建属性

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
样本输出

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

提前感谢

由于是typescript,我将为数组创建一个类型,并执行如下操作:

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);

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

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

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);

您可以根据需要更改标志的类型。它可以是布尔值、数字或我所做的定义集。

您可以使用非常简单的映射,例如:

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

const newArr = arr.map(addFlagIfCond)

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

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

const newArr = arr.map(addFlagIfCond)

使用类而不是普通对象,并重载标志的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

使用类而不是普通对象,并重载标志的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;
  }
});

使用
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;
    }
for(让长度=0;长度15)
arr[length][“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;
    }
for(让长度=0;长度15)
arr[length][“Flag”]=1;
}

如果您精确定义
年龄
类型,则可以在编译时执行此操作。大量的打字,但你得到了全面检查的类型级别

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

如果您精确定义
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

您可以将
Flag
设置为可选,如
Flag?:number
定义类型的任何位置,并根据您的条件添加它。如果未定义该标志,该怎么办。我只是想知道我们是否可以在场景@ShubhamEverything中添加一个属性,它与普通javascript相同。您可以将
Flag
设置为可选,如
Flag?:number
定义类型的任何位置,并根据您的条件添加它。如果没有定义该标志,该怎么办。我只是想知道我们是否可以在场景@ShubhamEverything中使用与普通javascript相同的属性。