将数组中的相同元素组合到数组中的一个字符串的更简洁的方法?
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);
我正在努力学习如何重构我的代码,我已经编写了以下功能块:
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);