javascript - 找出数组中所有相同的数字

标签 javascript arrays

我有一个包含 0 - 100 范围内数字的数组。我需要找到所有相同的数字并将它们加 1。

我的代码可以很好地处理 [100, 2, 1, 1, 0] 这样的数组

const findAndChangeDuplicates = (arr: any) => {
    for (let i = arr.length - 1; i >= 0; i--) {
        if (arr[i + 1] === arr[i] && arr[i] <= 5) {
            arr[i] += 1;
        } else if (arr[i - 1] === arr[i] && arr[i] >= 5) {
            arr[i] -= 1;

            findAndChangeDuplicates(arr);
        }
    }

    return arr;
};

但是当我遇到这个 [100, 6, 6, 6, 5, 5, 5, 5, 5, 4, 4, 4, 3, 3, 2, 2, 2, 2, 1, 1, 0, 0]

我的代码让我失望。

预期结果: [100, 20, 19, 18, 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0]

有什么想法吗?

最佳答案

一种方法,从末尾开始至少使用一个循环来调整值,如有必要,从头开始使用另一个循环将最大值设置为 100

两个循环都有一个值变量v。在第一个循环中,它从数组的最后一个值开始并递增它的值并检查该项目是否小于该值。

如果较小,则赋值,否则为下一项取实际值。

如有必要,另一个循环以相反的方向工作,起始值为 100 并检查该项目是否大于所需值并取较小的值,或者该值取自该项目.

结果是一个数组,该数组在开始时具有最大 100 值,直到零或大于数组末尾为止。

function update(array) {
    var i = array.length,
        v = array[--i];

    while (i--) if (array[i] < ++v) array[i] = v; else v = array[i];
    if (array[0] > 100) {
        v = 100;
        for (i = 0; i < array.length; i++) {
            if (array[i] > v) array[i] = v; else v = array[i];
            v--;
        }
    }
    return array;
}

console.log(update([100, 2, 1, 1, 0]));
console.log(update( [100, 100, 99, 86, 6, 5, 5, 5, 5, 5, 4, 4, 4, 3, 3, 2, 2, 2, 2, 1, 1, 0, 0]))
.as-console-wrapper { max-height: 100% !important; top: 0; }

关于javascript - 找出数组中所有相同的数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57291686/

相关文章:

javascript - 如何使用 PHP 打开 Bootstrap 模式?

ios - 滑动手势滑动 UIView

javascript - 使用 for/in 循环的 javascript 过滤器?

javascript - 在 NodeJS 中提供 mp3 文件以用于音频标签

javascript - 更改同一页面上的多个图像

c - 包含 2 个结构数组的结构数组未正确初始化,导致段错误

javascript - Node .js |将一个数组中的元素插入到另一个数组中的随机位置

arrays - 过滤一个数组以求另一个数组的总和

javascript - 是否可以有多个剑道网格实例

javascript - JavaScript focus() 是否触发浏览器滚动水平条