用打字稿替换数组中的值

时间:2019-02-21 14:38:38

标签: arrays angular typescript foreach

我有一个数组localData定义为:

public localData: Array<any> = [];

在下面的示例中,其长度为2,并且在开发人员工具中为以下值。

(2) [{…}, {…}]
0:
Country: "United States"
DataSource: ""
FunctionName: "Customer Service"
GroupName: "Main"
Index: 0
Result: undefined
StartDate: "5/1/2012"
StopDate: "
"
1:
Country: "United States"
DataSource: ""
FunctionName: "Customer Service"
GroupName: "Main"
Index: 1
Result: undefined
StartDate: ""
StopDate: "5/1/2019
"
__proto__: Object
length: 2
__proto__: Array(0)  

我需要将DataSource值替换为空白(如果有空白或其他任何值)。 我尝试这样做:

 this.localData.forEach(x => x.DataSource ? '' || 'XXX' : 'MyVAL');

此代码不会引发任何错误,但DataSource仍为空白。 有没有人曾经遇到过这个问题,或者知道为什么会这样?

5 个答案:

答案 0 :(得分:4)

您没有使用分配。 正如Doc所解释的,forEach为每个元素运行提供的函数,如果x.DataSource存在,则函数仅返回一个布尔值,否则返回一个字符串。

如果您的目标是更改数组,则可以通过赋值来修改函数:

this.localData = this.localData.map( item => {
   item.DataSource = item.DataSource ? '' || 'XXX' : 'MyVAL'
   return item;
});

或仅使用地图功能

public static interface Parcelable.ClassLoaderCreator implements Creator<T> 

android.os.Parcelable.ClassLoaderCreator<T>

说明: 在您的代码行中

  

this.localData.forEach(x => x.DataSource?''||'XXX':'MyVAL');

如果未定义x.DataSource或空字符串,则三元运算符将返回“ MyVAL”,如果其他所有情况,则始终返回“ XXX”。 如果我做对了,您想做类似的事情:

  

x.DataSource && x.DataSource!==? 'MyVAL':x.DataSource;

,它可以理解为:如果对DataSource进行了评估,并且与“ XXX”不同,请分配“ MyVal”,否则保持不变。

编辑:澄清

答案 1 :(得分:1)

尝试这种方式: this.localData.forEach(x =>(!x.DataSource || x.DataSource ==='XXX')?'MyVAL':x.DataSource);

哪里 !x.DataSource表示x.DataSource ===''

答案 2 :(得分:1)

您可以使用以下地图功能:

var origin = [{Country: "United States",
DataSource: "",
FunctionName: "Customer Service"},
{
Country: "United States",
DataSource: "US",
FunctionName: "Customer Service"
}
]

origin = origin.map(function(item){ if(item.DataSource == '') 
{
    item.DataSource = 'XXX'
} 
else{ 
item.DataSource = 'MyVAL';
} 
return item;})

答案 3 :(得分:1)

您可以过滤数组以找到要替换的DataSource值的项目,并在过滤后的项目上调用forEach以替换值:

this.localData
  .filter(x => ["", "XXX"].indexOf(x.DataSource) >= 0)
  .forEach(x => x.DataSource = "MyVAL");

有关演示,请参见this stackblitz

答案 4 :(得分:1)

尝试(。{of {.3}}}

for (let item of this.localData) {
 item.DataSource = item.DataSource ? 'XXX' : 'MyVal';
}