如何根据 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
我有以下数组对象
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