Loda sh устанавливает каждый элемент массива - PullRequest
0 голосов
/ 04 мая 2020

Есть ли способ использовать строковую нотацию в методе _.set для сопоставления всех элементов во вложенном массиве?

(например, мы надеемся, что аналогично позиционному оператору MongoDB )

const doc = {
  nested: [{a: 1}, {a: 2}, {a: 3}]
}

_.set(doc, "nested.$[].a", 5)

// console.log(doc)
// {
//   nested: [{a : 5}, {a: 5}, {a: 5}]
// }

1 Ответ

1 голос
/ 04 мая 2020

Нет, вы не можете установить каждый элемент во вложенном массиве с помощью метода .set(), но вы можете сделать это вместо этого:

const doc = {
  nested: [{a: 1}, {a: 2}, {a: 3}]
}

// Your attempt.
// _.set(doc, "nested.$[].a", 5)

// Just use a .map() with .assign() instead.
const doc2 = _.assign({}, doc, {
  nested: _.map(doc.nested, (obj) => _.assign({}, obj, { a: 5 }))
});

console.log(doc2)
// {
//   nested: [{a : 5}, {a: 5}, {a: 5}]
// }
<script src="https://cdn.jsdelivr.net/npm/lodash@4.17.15/lodash.min.js"></script>
...