在打字稿中替换数组中的值

Sil*_*ish 1 arrays foreach typescript angular

我有一个数组 localData 定义为:

public localData: Array<any> = [];
Run Code Online (Sandbox Code Playgroud)

在下面的示例中,它的长度为 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)  
Run Code Online (Sandbox Code Playgroud)

我需要将 DataSource 值替换为某个值(如果为空或者它有任何其他值)。我试着做:

 this.localData.forEach(x => x.DataSource ? '' || 'XXX' : 'MyVAL');
Run Code Online (Sandbox Code Playgroud)

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

Koo*_*op4 12

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

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

this.localData.forEach(x =>  {
   x.DataSource = x.DataSource ? '' || 'XXX' : 'MyVAL'
});
Run Code Online (Sandbox Code Playgroud)

或者干脆使用地图功能

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

说明:在您的代码行中

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

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

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

可以理解为:如果 DataSource 被评估并且它不同于 'XXX' 分配 'MyVal',否则保持原样。

编辑:澄清