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相同的属性。