用不同的值替换数组中的重复项

我想用不同的值替换重复项。


例如arr = [1,1,1,1,2,2,2,3],我想用R


所以结果看起来像这样 arr = [1,R,R,R,2,R,R,3]


现在我正在使用这种方法:


    arr = [1,1,1,1,2,2,2,3]

    let previous = 0;

    let current = 1;

    while (current < arr.length) {

        if (arr[previous] === arr[current]) {

            arr[current] = 'R';

            current += 1;

        } else if (arr[previous] !== arr[current]) {

            previous = current;

            current += 1;

        }

    }

我想知道是否有不同的方法来实现这一目标。例如使用 Lodash (uniqwith, uniq)。


谢谢


偶然的你
浏览 105回答 3
3回答

白衣染霜花

这是我会怎么做它看看当前元素是否是具有当前值的数组的第一个元素,如果不是则替换它在非常大的阵列上可能需要一些时间const input = [1,1,1,1,2,2,2,3]let output = input.map(&nbsp; (el, i) => input.indexOf(el) === i ? el : 'R')console.log(output)

心有法竹

您可以关闭 aSet并检查是否已经看到该值。let array = [1, 1, 1, 1, 2, 2, 2, 3],&nbsp; &nbsp; result = array.map((seen => v => seen.has(v) ? 'R' : (seen.add(v), v))(new Set));console.log(...result);检查先前值的方法let array = [1, 1, 1, 1, 2, 2, 2, 3],&nbsp; &nbsp; result = array.map((v, i, { [i - 1]: l }) => l === v ? 'R' : v);console.log(...result);

萧十郎

这实际上通过使用集合 ( Set ) 非常简单。const initialArray = [1,1,1,1,2,2,2,3];const valuesSet = new Set();const newArray = initialArray.map((value) => {&nbsp; &nbsp; if (valuesSet.has(value)) {&nbsp; &nbsp; &nbsp; &nbsp; return 'R';&nbsp; &nbsp; } else {&nbsp; &nbsp; &nbsp; &nbsp; valuesSet.add(value);&nbsp; &nbsp; &nbsp; &nbsp; return value;&nbsp; &nbsp; }});
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript