如何在不覆盖先前值的情况下为同一个键设置多个值?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在不覆盖先前值的情况下为同一个键设置多个值?相关的知识,希望对你有一定的参考价值。

基本上,我希望能够通过将单个键的值放入数组并将其设置为我的主对象以供以后访问,从而为单个键添加多个值。我怎样才能最好地做到这一点?真令人沮丧,我感到沮丧,问自己为什么我曾经以为自己可以做到这一点。

let mainObj = 


const func = (str, obj) => 
  mainObj[str] = [obj]


func('str1', content: 'content1'  )
func('str2', content: 'content2'  )
func('str2', content: 'content3'  )

console.log(mainObj)

//instead of this:
 str1: [  content: 'content1'  ],
  str2: [  content: 'content3'  ] 


//I want this:
 
  str1: [  content: 'content1'  ],
  str2: [ content: 'content2' ,  content: 'content3'  ]

答案

您应该先检查是否已经有带有该字符串键的数组;

[如果是,则将其推送到该数组,而不是将其替换为新数组,

如果不是,则执行您正在做的事情,使用该键创建一个数组

let mainObj = 


const func = (str, obj) => 
  if (mainObj[str])
    mainObj[str].push(obj)
  else
    mainObj[str] = [obj]
  


func('str1', content: 'content1'  )
func('str2', content: 'content2'  )
func('str2', content: 'content3'  )

console.log(mainObj)

//instead of this:
另一答案

只需像这样制作一个数组:

const func = (str, obj) => 
  mainObj[str] = (mainObj[str] || []).concat([obj])

另一答案

您应该推送到元素上而不是覆盖它。

let mainObj = 

const func = (str, obj) => 
  if (!mainObj[str]) 
    mainObj[str] = [];
  
  mainObj[str].push(obj);


func('str1', 
  content: 'content1'
)
func('str2', 
  content: 'content2'
)
func('str2', 
  content: 'content3'
)

console.log(mainObj)

以上是关于如何在不覆盖先前值的情况下为同一个键设置多个值?的主要内容,如果未能解决你的问题,请参考以下文章

如何在不删除先前相同值的情况下选择具有重复项的列表中的特定数字?

在不选择整个编辑器的情况下为 ace 编辑器设置值

Excel 2010:如何在不修改其输入值的情况下跨多个单元格更改公式?

如何在不影响 SYSTEM/IE 代理的情况下为 Webbrowser Control 设置代理

如何在不裁剪行/子视图的情况下为 tableView 的大小调整设置动画?

如何在不改变文本透明度的情况下为 UILabel 设置背景图像并调整其 alpha?