Я думаю, вы не понимаете, как именно работает Object.entries
. Вы должны взглянуть на MDN do c.
Чтобы помочь вам увидеть, что он делает, давайте выйдем из элементов массива, который вы перебираете с помощью forEach
:
someObject = { "someKey": "someValue" }
Object.entries(someObject).forEach(([key, value]) => {
console.log(`in "someObject", key "${key}" points to value "${value}" and can be accessed like so: someObject.${key}`)
})
// This logs out:
// in "someObject", key "someKey" points to value "someValue" and can be accessed with someObject.someKey
Object.entries
возвращает двумерный массив, где каждый элемент представляет собой пару ключ-значение.
В вашем примере кода вы пытаетесь получить доступ к value[key]
. Но value
- это просто строка "value"
, на которую указывает ваш ключ "key"
. Догадываясь о своем намерении, я думаю, что вы хотели получить доступ к obj[key]
, чтобы достичь "value"
(но вам на самом деле не нужно это делать, потому что Object.entries
уже "извлек" значение для вас).
Возможно, вы видели другую функцию-прототип Object, используемую в другом месте, Object.keys
, и перепутали ее здесь. Это чаще всего видно, потому что это было вокруг намного дольше. Если бы вы использовали Object.keys
вместо этого, у вас фактически был бы доступ к ключам самостоятельно, что близко к тому, что вы здесь сделали.
Object.keys
возвращает одномерный массив только ключей объекта (см. MDN документы ).
someObject = { "someKey": "someValue" }
Object.keys(someObject).forEach(key => {
console.log(`key "${key}" in object "someObject" points to value "${someObject[key]}"`)
})
// This logs out:
// key "someKey" in object "someObject" points to value "someValue"
Перепишем ваш фрагмент с эти функции. Вот с Object.entries
:
const data = [{
"key": "value"
}, {
"key": "value"
}]
data.forEach(obj => {
Object.entries(obj).forEach(([key, value]) => {
if (typeof value === 'string' && value.includes('value'))
obj[key] = "newvalue"
})
})
console.log(data)
// [ { key: 'newvalue' }, { key: 'newvalue' } ]
А вот с Object.keys
:
const data = [{
"key": "value"
}, {
"key": "value"
}]
data.forEach(obj => {
Object.keys(obj).forEach(key => {
if (typeof obj[key] === 'string' && obj[key].includes('value'))
obj[key] = "newvalue"
})
})
console.log(data)
// [ { key: 'newvalue' }, { key: 'newvalue' } ]