#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
этим сценарием.
Смотрите результат теста ниже:
Запустите сравнение отсюда: https://jsbench.me/05khwctt9o
Комментарии:
1. Зачем преобразовывать в массив, а затем запускать над объектом, в то время как вы можете запускать его с помощью a
for in
?2. @IsraGab Это хороший вопрос, поэтому я взглянул на некоторые тесты, чтобы сравнить скорость обоих решений. Интересно
Object.keys().forEach()
, что решение обычно на 20% быстрее, чемfor..in
. Смотрите результат здесь: jsbench.me/05khwctt9o3. @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';
}