Вы не используете назначение.Как объясняет 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', оставьте его как есть.
РЕДАКТИРОВАТЬ: уточнение