将数组中的相同元素组合到数组中的一个字符串的更简洁的方法?

More condense way to combine same elements in array to one string in array?

我正在努力学习如何重构我的代码,我已经编写了以下功能块:

joinSame = (arr) =>{
    let simplifiedArr = [];
    for(let i=0; i < arr.length; i++){
        const tempLast = arr.lastIndexOf(arr[i]);
        const element = arr[i].toString()
        if(i === tempLast){
            simplifiedArr.push(element);
        } else {
            const tempMultiplier = tempLast-i+1;
            simplifiedArr.push(element.repeat(tempMultiplier));
            i = tempLast;
        }
    }
    return simplifiedArr;
}

我的想法是,如果我输入一个排序数组 ([3,3,3,4,'a','a']),我希望输出是一个数组,其中相似的实体组合成一个字符串 (['333', '4', 'aa'])。我尝试使用 .map 和 .forEach 数组方法,但我的问题是试图“跳转”索引以转到下一个唯一元素。

我是否试图让它重构为 .map 或 .forEach 方法,从而使事情变得过于复杂,或者我的代码是否“好”到足以放手?

你可以利用reduce然后取Object.values:

const arr = [3,3,3,4,'a','a'];
const result = Object.values(arr.reduce((a,b)=>(a[b]=(a[b] || '')+b,a),{}))

console.log(result);