我有一个简单的对象数组,如下所示

let input = [
    { "p1": [ 1, 0 ] },
    { "p2": [ 1, 6 ] },
    { "total": [ 0, 4 ] },
    { "p3plus": [ 0, 2 ] }
]

我想做的就是重命名这个对象数组的键.因此我的最终输出应该如下所示.基本上,我将p1、p2、p3 plus和tall重新命名为P1、P2、P3+和tall.

let output = [
    { "P1": [ 1, 0 ] },
    { "P2": [ 1, 6 ] },
    { "Total": [ 0, 4 ] },
    { "P3+": [ 0, 2 ] }
]

我try 了以下代码

const output = input.map(({
  p1: P1,
  p2: P2,
  p3plus: P3+,
  total: Total,

  ...rest
}) => ({
  P1,
  P2,
  P3+, 
  Total, 
  ...rest
}));

此代码不起作用,主要是因为我试图放入P3+,但在编译过程中出错.即使我跳过重命名p3plus,输出也不会如预期的那样,因为它不断向最终输出添加undefined.有人能告诉我哪里出了问题吗

Here is the error enter image description here

此外,如果我不重命名p3Plus并继续重命名另外两个,我会看到不需要的未定义对象.如何才能消除获取那些未定义的对象

enter image description here

推荐答案

您可以使用一个对象进行替换,并映射具有替换属性的单个对象.

const
    input = [{ "p1": [ 1, 0 ] }, { "p2": [ 1, 6 ] }, { "total": [ 0, 4 ] }, { "p3plus": [ 0, 2 ] }],
    replacements = { p1: 'P1', p2: 'P2', total: 'Total', p3plus: 'P3+' },
    result = input.map(o => Object.fromEntries(Object
        .entries(o)
        .map(([k, v]) => [replacements[k] || k, v])
    ));

console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }

Javascript相关问答推荐

如何使用过滤后的结果更新博客文章列表?

为什么新的Promises会在不需要的情况下被用来等待?

橡皮擦完全让画布变成白色

窗口.getComputedStyle()在MutationObserver中不起作用

useNavigation更改URL,但不呈现或显示组件

TypeScript索引签名模板限制

点击按钮一次有文本出现和褪色,而不是点击两次?(html,CSS,JavaScript)

当作为表达式调用时,如何解析方法decorator 的签名?

给定一个凸多边形作为一组边,如何根据到最近边的距离填充里面的区域

使用Java脚本根据按下的按钮更改S文本

当Redux提供程序访问Reduxstore 时,可以安全地从Redux提供程序外部调用钩子?

如何从网站www.example.com获取表与Cheerio谷歌应用程序脚本

使用Google API无法进行Web抓取

对路由DOM嵌套路由作出react

更新动态数据中对象或数组中的所有值字符串

在开发期间,Web浏览器如何运行&qot;.jsx&qot;文件?

如何在Press上重新启动EXPO-AV视频?

第一项杀死下一项,直到数组长度在javascript中等于1

如何在一个对象Java脚本中获取不同键的重复值?

OnClick更改Json数组JSX中的图像源