Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何使用for循环将正确数量的重复项连接到字符串中?_Javascript_Loops_Duplicates - Fatal编程技术网

Javascript 如何使用for循环将正确数量的重复项连接到字符串中?

Javascript 如何使用for循环将正确数量的重复项连接到字符串中?,javascript,loops,duplicates,Javascript,Loops,Duplicates,我有一个包含重复对象的数组,比如:[A,A,B,C]。使用for循环,我将重复项的名称转换为字符串。我试过这个: for (var i = 0; i < myArray.data.length - 1; i ++) { for (var j = i + 1; j < myArray.data.length; j ++) { if (myArray.data[i].id == myArray.data[j].id) { identicalObjects = id

我有一个包含重复对象的数组,比如:[A,A,B,C]。使用for循环,我将重复项的名称转换为字符串。我试过这个:

for (var i = 0; i < myArray.data.length - 1; i ++) {
  for (var j = i + 1; j < myArray.data.length; j ++) {
    if (myArray.data[i].id == myArray.data[j].id) {
      identicalObjects = identicalObjects + myArray.data[i].name + ", " + myArray.data[j].name;
    }
  }
}
for(var i=0;i
这个打印:“A,A”,这是正确的。但是,如果数组是[A,A,A,B,C],它会打印“A,A,A,A,A,A”,这是不正确的,只有3个重复,而不是6个。我不能只剪切字符串,因为在某些情况下,不同的对象(具有不同的id)作为副本返回,我需要知道它们的名称才能知道它们到底是什么

我想到的一个解决方案是将名称存储在数组中,如果相同名称的数量大于2,则将其他名称的数量减半,然后转换为字符串。还有比这更简单有效的吗

但是,如果数组是[A,A,A,B,C],它将打印“A,A,A,A,A,A”

这是因为当i=0和j=1时,会得到一个匹配项,并且identicalObjects被设置为“a,a”。当i=0和j=2时,将获得另一个匹配,并将identicalObjects设置为其上一个值加上“A,A”。然后在i=1和j=2时获得另一个匹配,并执行相同的串联


为什么不使用对象并使用对象作为键,值是计数?

这可能不是实现这一点最简单的方法,但我认为它应该完成这项工作

var uniqueLetters = myArray.filter(distinct);

for(var i = 0; i < uniqueLetters.length; i++){
    for(var j = 0; j < myArray.Length; j++){

        if(myArray.data[j] == uniqueLetters[i]){
            identicalObjects = identicalObjects + myArray.data[i].name + ", " + myArray.data[j].name;
        }
    }
}
var uniquelets=myArray.filter(不同);
对于(变量i=0;i
比如说。假设你有一个数组[A,A,B,C]<代码>唯一字母将包含[A、B、C]。然后在原始数组中循环,检查不同的数组


同样,这可能不是处理这个问题的最直接的方法,但它应该会起作用。

如果将对象数组转换为列表,则更简单、更灵活。 列表更强大,你可以用它做更多的事情

在您的示例中,您试图根据ID查找重复项。有了列表,这可以用一句话来实现

Map<Integer, List<YourObject>> yourObjectMap = empArray.stream().collect(Collectors.groupingBy(YourObject::getId));

Map yourObjectMap=empArray.stream().collect(Collectors.groupingBy(YourObject::getId));

您正在添加
myArray.data[i].name
两次,尝试
identicalObjects+=(identicalObjects?”,“:”)+myArray.data[i].name
这不是真的,因为第二次迭代从
i+1
开始,OP的方法只有在重复4次或更多次之后才会失败。这是一个测试,我的观点不是算法找到了3个匹配项,而是它为找到的每个匹配项打印了“a,a”。因此,当有3个匹配项时,得到3*“A,A”。