JS:使用更新的索引号重新启动循环



是否有可能使用新索引号重新启动此循环:

let ar = [1, 1, 2, 1, 2, 1, 3, 2, 3, 1];
let sortedArray = ar.sort();
let sameNumbersArray = [];
let numberOfSameNumbers = 0;
let lastIndexNumber = 0;
for (i = lastIndexNumber; i < sortedArray.length; i++) {
if (sortedArray[i] == sortedArray[i + 1]) {
const sameNumber = sortedArray[i];
sameNumbersArray.push(sameNumber);
} else {
break;
}
let lastIndexFromNumberArray = [];
lastIndexFromNumberArray.push(sameNumbersArray.length);
lastIndexFromNumberArray.push(3);
lastIndexFromNumberArray.push(2);

lastIndexNumber = lastIndexFromNumberArray.reduce(function (a, b) {
return a + b;
}, 0);

因此,基本上,循环(lastIndexNumber(以索引[0]开始,但随后以索引[5]和索引[7]重新开始。

如何添加这个额外的循环?

我不是100%清楚这里的目标。你能详细说明以上所期望的结果吗?

看起来你们想从源数组中得到一个唯一数字的数组,也许还有唯一数字的数量?

如果是这样的话,这里有另一种可能更清洁的方法:

let ar = [1, 1, 2, 1, 2, 1, 3, 2, 3, 1];
let sortedArray = ar.sort();
let newSameNumbersArray = unique(sortedArray);
//array of unique numbers:
console.log(newSameNumbersArray);
//count of unique numbers:
console.log(newSameNumbersArray.length);
function unique(array) {
return Array.from(new Set(array));
}

这是基于这样的答案:https://stackoverflow.com/a/44405494/4801692

也就是说,您可以直接设置i的值,并使用continue移动到"下一个"迭代。

i = 5;
continue;

但这很糟糕,因为您有可能给i一个较低的数字,并陷入无限循环。如果你能多解释一下这个要求,我可能会提出更好的建议。

你可以做这样的事情来找到对

let ar = [10, 10, 10, 20, 20, 10 ,30, 20 ,30]
function findPair(ar) {
let counts = {};
let count = [];
let sum = 0;
for(let i = 0; i < ar.length; i++){
let item = ar[i]
counts[item] = counts[item] >= 1 ? counts[item] + 1 : 1;
}
count = Object.values(counts);
for(let i = 0; i < count.length; i++){
if(count[i] >= 2){
sum += Math.floor(count[i]/2)
}
}
console.log(sum)
}
findPair(ar)

相关内容

最新更新