首页 > 解决方案 > 将数组中的相同元素组合为数组中的一个字符串的更简洁的方法?

问题描述

我正在尝试学习如何重构我的代码,并且我编写了以下功能块:

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 方法而使事情变得过于复杂,或者我的代码“好”到足以让它消失吗?

标签: javascriptarraysrefactoring

解决方案


您可以利用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);


推荐阅读