#javascript #jquery
#javascript #jquery
Вопрос:
Как мне применить функцию умножения ко всем значениям с ключевой схемой цветов в приведенном ниже вложенном объекте? Таким образом, возвращая тот же массив с цветовой схемой, измененной с 10 на> 20? Объект имеет переменную длину для каждого представителя.
function multiply(el) {
return el * 2
}
var array = {
"rep1": {
"type": [
"cartoon"
],
"colorScheme": [10]
},
{
"rep2": {
"type": [
"cartoon"
],
"colorScheme": [10]
},
"rep3": {
"type": [
"cartoon"
],
"color": [
"green"
]
}
}
Комментарии:
1. это полный объект или он будет иметь
rep3
иrep4
т. Д.?2.
colorScheme
В вашем объекте есть только 1 свойство, поэтомуmultiply(array.rep1.colorScheme[0])
оно будет работать. Если у вас больше свойств, чем требуется для выполнения логики, пожалуйста, добавьте к вопросу более представительный пример. Я бы также настоятельно рекомендовал вам использовать для этого массив вместо свойств с приращением имен в объекте3. @ShyamPillai Нет, он не завершен, и у каждого rep3 может быть множество ключей.
4. Ваша
array
переменная — это объект, и чтобы знать, как его обновить, нам нужно знать возможные структуры, которые он может иметь.5. Спасибо за редактирование, однако показанная вами структура данных неверна. Возможно ли, чтобы решение изменило структуру на массив?
Ответ №1:
Вам нужно будет проявить немного творчества с reduce
, map
и оператор spread ( ...
) .
function multiply(el) {
return el * 2
}
var array = {
"rep1": {
"type": [
"cartoon"
],
"colorScheme": [10]
},
"rep2": {
"type": [
"cartoon"
],
"colorScheme": [10]
},
"rep3": {
"type": [
"cartoon"
],
"color": [
"green"
]
}
}
var result = Object.entries(array).reduce( (acc, [key, value]) => {
if(value.colorScheme)
acc[key] = {...value, colorScheme: value.colorScheme.map(multiply)};
else
acc[key] = {...value};
return acc;
},{})
console.log(result)
Ответ №2:
вы можете попробовать это:
function multiply(el){
return el * 2
}
const nestedObject = {
"rep1": {
"type": [
"cartoon"
],
"colorScheme": [10]
},
"rep2": {
"type": [
"cartoon"
],
"colorScheme": [10]
},
"rep3": {
"type": [
"cartoon"
],
"color": [
"green"
]
}
}
for (const key of Object.keys(nestedObject)){
if(nestedObject[key].colorScheme)
nestedObject[key].colorScheme = nestedObject[key].colorScheme.map(multiply)
}
console.log(nestedObject)
Комментарии:
1. вы предполагаете, что
colorScheme
это всегда существует?2. нет … и в чем еще дело? это работает не так, как ожидалось?
3. @ShyamPillai Нет, иногда его вообще не существует.
4. Да, теперь это лучше. Это должно работать правильно @Nivel?