JS: перезапустить l oop с обновленным индексным номером - PullRequest
1 голос
/ 25 апреля 2020

Есть ли возможность перезапустить этот l oop с новым индексным номером:

    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);

Так что в основном l oop (lastIndexNumber) начинается с индекса [0], но затем перезапускается с индексом [5] и индексом [7].

Как можно добавить этот дополнительный l oop?

Ответы [ 2 ]

1 голос
/ 25 апреля 2020

Я не уверен на 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));
}

Это основано на этом ответе: { ссылка }

Тем не менее, вы можете напрямую установить значение i и использовать continue для перехода к следующей итерации.

i = 5;
continue;

Это плохо, хотя , поскольку вы рискуете кормить i ниже число и застревание в бесконечном l oop. Если вы сможете объяснить это требование немного больше, я мог бы предложить что-то лучшее.

0 голосов
/ 26 апреля 2020

вы можете сделать такую ​​вещь, чтобы найти пары

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)
...