javascript - 是否有更快的方法将数据对象键中的值复制到 javascript 中同一数据对象中的新键?
问题描述
当我从 API 端点接收到一组对象时,我正在尝试如何使我的代码更简洁。这是初始变量:
let stringOptionsOutlet = [];
然后我想创建一个名为“value”的新键。这就是我通常的做法(我认为这还可以,但我相信与您可能想出的其他技术相比,肯定有一些缺点):
stringOptionsOutlet = [...response.data.outlet]; // 1. this is the data I get from an API endpoint, I copy it with the spread operator
stringOptionsOutlet.map((v) => return { ...v, value: "" }; ); // 2. then I make the same new value in every single data object inside the array stringOptionsOutlet
Object.entries(stringOptionsOutlet).forEach((e) => {
e[1].value = e[1].id; // 3. copy the value of id to the new key
});
我映射数据之前的数据:
[
{
label: "A1-1",
id: "1",
},
{
label: "B2-1",
id: "4",
},
]
映射后(第 2 步和第 3 步):
[
{
label: "A1-1",
id: "1",
value: "1",
},
{
label: "B2-1",
id: "4",
value: "1"
},
]
能否请您解释一下这些技术的优点和缺点?谢谢你。
解决方案
你正在做的事情会奏效,但肯定有一些不必要的步骤。当您可以映射 API 响应本身时,无需将 API 响应数据复制到数组中,然后更改数组内容。
// You can do steps 1 2 and 3 all in 1 .map()
const stringOptionsOutlet = response.data.outlet.map(v => {
return {
...v,
value: v.id
}
})
以 1 方式完成所有操作的缺点是,如果您想做一些更复杂的逻辑,那么单个.map
调用可能会变得非常混乱,并且可能引入一个单独的步骤会更简单,但需要注意的是,您随后会处理数据第二次。
推荐阅读
- html - 为什么会有 HTML5”
" 在我的 EJS 布局中生成的标签?
- python - 在 python 中跟踪路由实现
- javascript - d3按路径动画组
- c++ - 根据单个任务的时间需求动态创建线程
- reactjs - 隐藏组件以在 React 中保持其状态
- python - 并非所有排列都包括在内 [itertools, permutations]
- arrays - 是否可以在打字稿中定义 Float32Array 类型的大小?
- error-handling - EAFP 如何避免 LBYL 中出现 TOC/TOU 竞争条件的风险?
- node.js - 无法读取 NodeJS 中未定义的属性“F_OK”
- python - 我将此格式作为对象 2020-11-18 10:36:29.772234 +0000 UTC,想转换为日期时间