Javascript 如何使用for循环将正确数量的重复项连接到字符串中?
我有一个包含重复对象的数组,比如:[A,A,B,C]。使用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
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”。