Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays 替换typescript中数组中的值_Arrays_Angular_Typescript_Foreach - Fatal编程技术网

Arrays 替换typescript中数组中的值

Arrays 替换typescript中数组中的值,arrays,angular,typescript,foreach,Arrays,Angular,Typescript,Foreach,我将数组localData定义为: public localData: Array<any> = []; 我需要将数据源值替换为,如果为空,或者如果它有任何其他值,则替换为某个值。 我试着做: this.localData.forEach(x => x.DataSource ? '' || 'XXX' : 'MyVAL'); 此代码不会引发任何错误,但数据源仍然为空。 以前有没有人遇到过这个问题,或者知道为什么会发生这种情况?尝试以下方法: this.localData.

我将数组localData定义为:

public localData: Array<any> = [];
我需要将数据源值替换为,如果为空,或者如果它有任何其他值,则替换为某个值。 我试着做:

 this.localData.forEach(x => x.DataSource ? '' || 'XXX' : 'MyVAL');
此代码不会引发任何错误,但数据源仍然为空。 以前有没有人遇到过这个问题,或者知道为什么会发生这种情况?

尝试以下方法:

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

!x、 DataSource
表示
x。DataSource==''

尝试以下方法:

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


!x、 数据源
表示
x。数据源==''

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

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

this.localData.forEach(x =>  {
   x.DataSource = x.DataSource ? '' || 'XXX' : 'MyVAL'
});
或者简单地使用map函数

this.localData = this.localData.map( item => {
   item.DataSource = item.DataSource ? '' || 'XXX' : 'MyVAL'
   return item;
});
澄清: 在代码行中

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

如果x.DataSource未定义或为空字符串,则三元运算符将返回“MyVAL”,如果所有其他情况,则始终返回“XXX”。 如果我没弄错的话,你想做一些类似的事情:

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

这可以理解为:如果对数据源进行了评估,并且它与'XXX'不同,请分配'MyVal',否则请保持原样


编辑:澄清

您没有使用作业。 如前所述,forEach为每个元素运行提供的函数,如果x.DataSource存在,函数只返回一个布尔值,否则返回一个字符串

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

this.localData.forEach(x =>  {
   x.DataSource = x.DataSource ? '' || 'XXX' : 'MyVAL'
});
或者简单地使用map函数

this.localData = this.localData.map( item => {
   item.DataSource = item.DataSource ? '' || 'XXX' : 'MyVAL'
   return item;
});
澄清: 在代码行中

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

如果x.DataSource未定义或为空字符串,则三元运算符将返回“MyVAL”,如果所有其他情况,则始终返回“XXX”。 如果我没弄错的话,你想做一些类似的事情:

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

这可以理解为:如果对数据源进行了评估,并且它与'XXX'不同,请分配'MyVal',否则请保持原样


编辑:澄清

您可以像这样使用映射功能:

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

您可以像这样使用映射功能:

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

您可以筛选数组以查找具有要替换的
DataSource
值的项,并对筛选的项调用
forEach
以替换值:

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

有关演示,请参阅。

您可以筛选数组以查找具有要替换的
数据源
值的项,并对筛选的项调用
forEach
,以替换值:

this.localData
  .filter(x => ["", "XXX"].indexOf(x.DataSource) >= 0)
  .forEach(x => x.DataSource = "MyVAL");
请参阅以获取演示。

尝试()

争取……的


使用
console.log(JSON.stringify(localData))
显示数组。另外,您没有在
forEach
中设置任何内容,因此没有任何更改。可能重复使用
console.log(JSON.stringify(localData))
来显示您的数组。此外,您没有在
forEach
中设置任何内容,因此没有任何更改。filter方法的可能副本将创建一个新数组,其中包含通过测试的所有元素,因此Foeech将编辑此新数组。如果不重新分配,它不会改变原来的数组,是吗?@Koop4-如果你尝试一下,你会发现它是有效的。这是因为过滤后的数组包含原始数组的项,然后在
forEach
中修改这些原始项。是的,刚刚意识到数组是一个对象数组,由于这些是引用,新数组是不同的,但它引用的项是相同的。完全合乎逻辑。谢谢。filter方法创建了一个包含所有通过测试的元素的新数组,因此每个元素都将编辑这个新数组。如果不重新分配,它不会改变原来的数组,是吗?@Koop4-如果你尝试一下,你会发现它是有效的。这是因为过滤后的数组包含原始数组的项,然后在
forEach
中修改这些原始项。是的,刚刚意识到数组是一个对象数组,由于这些是引用,新数组是不同的,但它引用的项是相同的。完全合乎逻辑。谢谢