JavaScript - 使用扩展操作或替代方法向对象添加额外的键值

Posted

技术标签:

【中文标题】JavaScript - 使用扩展操作或替代方法向对象添加额外的键值【英文标题】:JavaScript - adding extra keys values to an object using spread operation or alternative approaches 【发布时间】:2021-11-14 03:03:58 【问题描述】:

代码如下:

    let bucket = [[],[],[],[],[],[],[],[],[],[]];

    bucket = ...Object.keys(bucket)
                       .sort((a,b) => b-a)
                       .filter(key => key > 0)
                       .map(key => '-'+key), 
              ...bucket;

   console.log(bucket);

问题:第一行代码没有将原始桶对象的负键添加到对象中,所有属性(键)都有空数组作为其对应值。

bucket 只在这行代码被求值后才显示它的原始属性和值

我怎样才能让它工作?

【问题讨论】:

【参考方案1】:

Array.map() 使用您的否定键创建一个字符串数组,当您传播 bucket 数组时它们会被覆盖。而是创建一对[new key, []] 转换为带有Object.fromEntries() 的对象,然后传播它们:

const bucket = [[],[],[],[],[],[],[],[],[],[]];

const result = 
  ...Object.fromEntries(
    Object.keys(bucket)
      .filter(key => key > 0)
      .sort((a, b) => b-a)
      .map(key => [-key, []])
  ),
  ...bucket;

console.log(result);

【讨论】:

好的...我现在明白了,所以我的数组需要转换回一个对象,然后展开,我没有成功地做到这一点。我现在有一个新方法,我需要在必要时定期使用,即 fromEntries 方法。我也错误地没有为键指定空值。这可以在没有一对数组值的情况下完成吗,但更像是 [-key] 的括号单独带有相应的属性?请建议。非常感谢。 不客气 :)

以上是关于JavaScript - 使用扩展操作或替代方法向对象添加额外的键值的主要内容,如果未能解决你的问题,请参考以下文章

Paypal(或替代方案)向陌生人付款?

这种 for 循环迭代的替代方法是如何工作的? (Javascript)[重复]

ESlint for VSCode 不使用节点或替代方案?

javaScript 客户端代码的替代“架构”方法?

JavaScript设计模式中的命令模式

JavaScript设计模式中的命令模式