Как обновить все значения вложенного объекта в react или JavaScript

#javascript #reactjs #algorithm #react-native #ecmascript-6

#javascript #reactjs #алгоритм #react-native #ecmascript-6

Вопрос:

Каков подходящий способ обновить все значения вложенного словаря.

Давайте предположим, что у меня есть этот объект:

 someObj = {
  0: {
    message: 'Some text',
  },
  1: {
    message: 'Other text',
  },
}

 

Если бы мне просто нужно было обновить первое сообщение об объекте, я бы сделал что-то вроде:

 someObj[0].message = 'New Message'
 

но чего я хочу добиться, так это обновить все значение сообщения в объекте одним конкретным текстом.

Каков правильный способ достижения вышеуказанного?

Ответ №1:

Вы можете попробовать с Object.keys() помощью, см. Документацию:

Object.keys() Метод возвращает массив собственных перечислимых имен свойств данного объекта, повторяющихся в том же порядке, что и в обычном цикле.

 const someObj = { 0: { message: 'Some text', }, 1: { message: 'Other text', },}

Object.keys(someObj)
      .forEach(e => {
         someObj[e].message = 'new_text'
      })

console.log(someObj) 

1 обновление вне области видимости:

В разделе комментариев был интересный вопрос от @IsraGab, почему использовать это решение снова for..in .

Итак, я взглянул на некоторые тесты, чтобы сравнить скорость обоих решений. Интересно Object.keys().forEach() , что решение обычно на 20% быстрее по сравнению с for..in этим сценарием.

Смотрите результат теста ниже: JS benchmark

Запустите сравнение отсюда: https://jsbench.me/05khwctt9o

Комментарии:

1. Зачем преобразовывать в массив, а затем запускать над объектом, в то время как вы можете запускать его с помощью a for in ?

2. @IsraGab Это хороший вопрос, поэтому я взглянул на некоторые тесты, чтобы сравнить скорость обоих решений. Интересно Object.keys().forEach() , что решение обычно на 20% быстрее, чем for..in . Смотрите результат здесь: jsbench.me/05khwctt9o

3. @Israg Просто расширил мой ответ этим результатом, интересный разговор, спасибо, что подняли этот вопрос!

Ответ №2:

Используйте for in loop

     for(let prop in object){
       object[prop].message = 'Your string';
   }
 
 someObj = {
  0: {
    message: 'Some text',
  },
  1: {
    message: 'Other text',
  },
}

for(let prop in someObj){
someObj[prop].message = 'your string';
}

console.log(someObj) 

Ответ №3:

 const keys = Object.keys(someObj);
for(let i = 0; i < keys.length; i  ) {
  someObj[keys[i]].message = 'Your string';
}