Javascript 比较对象内重复更新的键值

Javascript 比较对象内重复更新的键值,javascript,ecmascript-6,Javascript,Ecmascript 6,这是一篇来自的后续帖子,希望得到一个后续的答案 我有一个目标: myObj = { attendent-0-id:"123", attendent-0-name:"Bob Smith", attendent-1-id:"1234", attendent-1-name:"Alex Smith", attendent-2-id:"123", attendent-2-name:"Charlie Smith", attendent-0-id:"123", attenden

这是一篇来自的后续帖子,希望得到一个后续的答案

我有一个目标:

myObj = {
  attendent-0-id:"123",
  attendent-0-name:"Bob Smith",
  attendent-1-id:"1234",
  attendent-1-name:"Alex Smith",
  attendent-2-id:"123",
  attendent-2-name:"Charlie Smith",
  attendent-0-id:"123",
  attendent-0-name:"John Smith",
  attendent-maxGuest:1,
  attendent-party-name:"",
}
多亏了这方面的帮助(瑞克),我才得以完成90%的路程

function errorOnDuplicateIds(obj) {
  const map = {};
  const pattern = /^attendent-\d+-id$/;

  for (const key of Object.keys(obj)) {
    if (pattern.test(key)) {      
      const value = obj[key]

      if (value in map) {
        map[value] = [map[value], key];       
      } else {
        map[value] = key
      }
    }    
  }
return map;
}
我得到的回报是:

array:[
  0:(2) ["attendent-0-name", "attendent-1-name"]
  1:"attendent-2-name"
]
但我正在寻找:

array:[
  0:(2) ["attendent-0-name", "attendent-1-name", "attendent-2-name"]
]

我遇到的问题是,如果有两个匹配的键,它就可以工作,但是如果有三个或更多的键,它就不能(正确地)工作

如果要为映射中的每个关键点创建一个包含所有匹配项的数组,则需要在第一次找到关键点时设置一个数组。在随后的匹配中,只需推入该数组:

const myObj={'attendent-0-id':“1234”、'attendent-0-name':“鲍勃·史密斯”、'attendent-1-id':“123”、'attendent-1-name':“亚历克斯·史密斯”、'attendent-2-id':“123”、'attendent-2-name':“查理·史密斯”、'attendent-maxGuest':1、'attendent-party-name':“,”;
函数错误重复ID(obj){
常量映射={};
常量模式=/^attentent-\d+-id$/;
for(对象的常量键。键(obj)){
if(模式测试(键)){
常量值=对象[key]
if(地图中的值){
映射[值]。推(键);//推一个新值
}否则{
map[value]=[key]//将其设置为数组
}
}
}
/*如果您只希望长度>1
否则只需返回地图*/
let filtered=Object.entries(映射)
.reduce((a[key,value])=>value.length>1?对象.assign(a,{[key]:value}):a,{})
返回过滤;
}

log(errorOnDuplicateID(myObj))我认为您应该编辑原始问题,而不是创建另一个问题。听起来您不应该接受一个无效的答案?它确实满足了我的需要,但情况发生了变化。提供上述答案的人提出了一个新问题,以便将事情分开。这将有助于了解它为什么不能正常工作。当有三个或更多相同的id时,预期的结果是什么?实际给出的是什么?当有多个匹配时,期望的行为是什么?Great@RyleyAmeden,请注意,这将返回所有值,即使只有一个id。我添加了一个编辑,它显示了一种只过滤重复的快速方法。我注意到,谢谢!这给了我一个错误,{}@RyleyAmeden上不存在长度,也许你的传球错了,不确定。我将它添加到代码段中,以便您可以看到它的实际操作。