Я пытаюсь обновить поле mobileNumber всех элементов в массиве. Я пробовал следующие предложения здесь, в StackOverflow, но, похоже, ни одно из них не обновляет поле в массиве.

_.each(results, function(item) {
  _.set(item, 'mobileNumber', 2);
});

const formattedResults = _.each(results, function(item) {
  _.set(item, 'mobileNumber', 2);
});

Что я делаю не так?

РЕДАКТИРОВАТЬ: В Typescript оказывается, что даже присвоение моего исходного массива новому массиву с помощью let каким-то образом также сохраняло новый массив только для чтения.

В итоге я использовал lodash _clone перед установкой значения, а затем обновление сработало ...

let formattedResults = _.map(results, _.clone);
0
Greg Quinn 26 Сен 2018 в 03:20

2 ответа

Лучший ответ

То, что вы сделали, на самом деле правильно, проверьте здесь https://jsbin.com/fiyinahovi/edit?js , консоль

let results = [{mobileNumber: 1}, {mobileNumber: 3}, {mobileNumber: 7}]
_.each(results, function(item) {
  _.set(item, 'mobileNumber', 2);
});

console.log(results);
1
Salih Şenol Çakarcı 26 Сен 2018 в 00:34

Простите за вопрос, но зачем нужен _.set? Обычно вы хотите использовать set в сценариях, где свойство, которое вы хотите изменить, передается в виде строки и т. Д. Глядя на ваш код, вы установили / жестко запрограммировали mobileNumber внутри тела _.each .. или это только для примера?

Потому что в противном случае он более краток (и не требует lodash) с помощью всего:

let results = [{mobileNumber: 1, foo: 2}, {mobileNumber: 3}, {mobileNumber: 7}]

results.forEach(x => x.mobileNumber = 2)

console.log(results)
0
Akrion 27 Сен 2018 в 05:50