javascript - 如何将键值对映射到对象中的每个索引
问题描述
我正在尝试使用 map 向我的对象添加一个新的键和值对。该值只是一个空数组,因此我可以稍后将对象推入其中。
这是我的代码:
let columns = [
{
_id: "5e8af4591c9d440000a1a4ed",
column_name: "Opportunities",
column_value: 0,
column_percentage: 0.25
},
{
_id: "5e8af4a81c9d440000a1a4ee",
column_name: "Prospects",
column_value: 0,
column_percentage: 0.5
}
];
let output = columns.map(() => ({posts: []}));
console.log(output)
这是我希望我的对象在映射后的样子:
let columns = [
{
_id: "5e8af4591c9d440000a1a4ed",
column_name: "Opportunities",
column_value: 0,
column_percentage: 0.25,
posts: []
},
{
_id: "5e8af4a81c9d440000a1a4ee",
column_name: "Prospects",
column_value: 0,
column_percentage: 0.5,
posts: []
}
];
但目前的输出是:
[
{
posts: []
},
{
posts: []
}
]
解决方案
您的代码不起作用,因为新数组将包含映射器函数返回的内容。
即使它与原始数组的内容无关,它也会保持其返回值不变。
因此,如果您返回一个 object {posts:[]}
,它将是输出。
您必须将该对象合并到映射器函数内的当前数组元素中。
您可以使用对象扩展语法来合并两个对象:
let columns = [
{
_id: "5e8af4591c9d440000a1a4ed",
column_name: "Opportunities",
column_value: 0,
column_percentage: 0.25
},
{
_id: "5e8af4a81c9d440000a1a4ee",
column_name: "Prospects",
column_value: 0,
column_percentage: 0.5
}
];
columns.map(obj => ({...obj, posts: []}));
但是,这是一个相对较新的功能,因此,如果您需要更大的支持,您可以使用Object.assign
:
let columns = [
{
_id: "5e8af4591c9d440000a1a4ed",
column_name: "Opportunities",
column_value: 0,
column_percentage: 0.25
},
{
_id: "5e8af4a81c9d440000a1a4ee",
column_name: "Prospects",
column_value: 0,
column_percentage: 0.5
}
];
columns.map(obj => Object.assign({posts: []}, obj));
推荐阅读
- solr - Solr 7.5 内存泄漏和使用 sql 注入类型查询崩溃
- android-studio - 提取未翻译的字符串资源
- javascript - 在聊天 ui 中添加过渡动画
- python - 分段错误(核心转储)jetson nano
- javascript - 使用 JavaScript 编辑样式会禁用 CSS `:hover` 选择器
- c# - 如何在 ASP.NET Core Razor Pages 部分标签助手中动态传递名称属性?
- apache-kafka - 动态创建消费者spring kafka
- node.js - 取消合并分支
- flutter - 在颤动中从小部件屏幕截图中设置壁纸
- javascript - 错误:没有可用的 chokidar 版本。试过 chokidar@2 和 chokidar@3。将 npm 升级到 7.*.* 后