javascript - 如何使用扩展运算符扩展对象
问题描述
我有以下具有初始值的对象:
const initialValues = {
title: '',
quadrants: {
0: { name: '' },
1: { name: '' },
2: { name: '' },
3: { name: '' }
},
rings: {
0: { name: '' },
1: { name: '' },
2: { name: '' },
3: { name: '' }
},
};
我想扩展它,以便在环中也给出颜色属性。我目前已经以这种方式解决了它并且它有效。但是我有一种感觉是错误的,可以更干净地解决:
const styledConfig = {
colors: {
background: '#fff',
grid: '#bbb',
inactive: '#ddd'
},
rings: {
...config.rings,
0: { name: config.rings[0].name, color: '#93c47d' },
1: { name: config.rings[1].name, color: '#b7e1cd' },
2: { name: config.rings[2].name, color: '#fce8b2' },
3: { name: config.rings[3].name, color: '#f4c7c3' }
}
};
结果看起来像这样 - 这是正确的:)
rings: {
0: { name: 'Ring1', color: '#93c47d' },
1: { name: 'Ring2', color: '#b7e1cd' },
2: { name: 'Ring3', color: '#fce8b2' },
3: { name: 'Ring4', color: '#f4c7c3' }
},
有人知道如何做这个清洁剂吗?
解决方案
您可以制作一个颜色值数组并使用reduce
方法来达到相同的效果,如下所示:
const styledConfig = {
colors: {
background: '#fff',
grid: '#bbb',
inactive: '#ddd'
},
rings: {
...config.rings,
...['#93c47d', '#b7e1cd', '#fce8b2', '#f4c7c3'].reduce((a, color, i) => {
a[i] = {name: config.rings[i].name, color};
return a;
}, {})
}
};
推荐阅读
- python - 有没有办法从光束管道的嵌套记录中获取少量字段?
- angular - 无法将数组传递给从 @Input 获取数据的 chart.js
- css - 在不影响边距或尺寸的情况下,在 div 中居中文本?
- node.js - nodejs:尝试与 SignalR api 交谈时出现未知错误
- python-3.x - 将在 Conda 环境中创建的 Python App 部署到 Heroku
- tensorflow - 使用 Bazel 安装 Tensorflow 时出现 CalledProcessError
- java - 实际请求参数不满足消息参数条件“拒绝”:reason={}
- c# - 如何在 c# Azure Function 项目中的多个类中重用 ILogger?
- html - Div 开头的图标/图像
- ios - 将第三方框架链接到我自己的框架,使用 Carthage 分发