Замена значения в массиве в машинописи - PullRequest
0 голосов
/ 21 февраля 2019

У меня массив Array 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 голосов
/ 21 февраля 2019

Попробуйте за ... из (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/for...of)

for (let item of this.localData) {
 item.DataSource = item.DataSource ? 'XXX' : 'MyVal';
}
0 голосов
/ 21 февраля 2019

Вы можете отфильтровать массив, чтобы найти элементы со значениями DataSource для замены, и вызвать forEach отфильтрованных элементов для замены значения:

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

См. этот стек для демонстрации.

0 голосов
/ 21 февраля 2019

Вы не используете назначение.Как объясняет Doc , forEach запускает предоставленную функцию для каждого элемента, а ваша функция просто возвращает логическое значение, если x.DataSource существует, в противном случае - строка.

Если ваша цель состоит в изменении массиваВы можете изменить свою функцию с помощью присваивания:

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

или просто использовать функцию карты

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

Уточнение: в строке кода

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

троичный оператор вернет 'MyVAL', если x.DataSource не определен илипустая строка и всегда «XXX», если все остальные случаи.Если я правильно понял, вы хотите сделать что-то вроде:

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

, который можно прочитать как: если DataSource оценивается и отличается от 'XXX', назначьте 'MyVal', оставьте его как есть.

РЕДАКТИРОВАТЬ: уточнение

0 голосов
/ 21 февраля 2019

Вы можете использовать функцию карты следующим образом:

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;})
0 голосов
/ 21 февраля 2019

попробуйте следующим образом: this.localData.forEach (x => (! X.DataSource || x.DataSource === 'XXX')? 'MyVAL': x.DataSource);

Где! x.DataSource означает x.DataSource === ''

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...