用不同的方法重构函数javascript



这个函数current接收一个数组,如果元素的长度大于一个,则输出一个带有计数的字符

有没有一种方法可以做到这一点,也许可以使用不同的javascript数组方法,而不必使用新的数组或结果变量?

const a = ['aaa', 'z', 'eeeee'];
const compressCharacters = arr => {
let newArray = [];
let result = arr.forEach(e => e.length > 1 ? newArray.push(`${e[0]}${e.length}`) : newArray.push(e))
return newArray.join("");
}
console.log(compressCharacters(a));

您可以只使用map()而不是forEach()并返回所需的值。不需要额外的数组。通常情况下forEach + push()==map()

const a = ['aaa', 'z', 'eeeee'];
const compressCharacters = arr => {
return arr.map(e => e.length > 1
? `${e[0]}${e.length}` 
: e)
.join("");
}
console.log(compressCharacters(a));

您可以构造并立即返回一个mapped数组,该数组由空字符串连接:

const a = ['aaa', 'z', 'eeeee'];
const compressCharacters = arr => (
arr.map(str => str[0] + (str.length > 1 ? str.length : ''))
.join('')
)
console.log(compressCharacters(a));

当您试图通过转换其他数组中的所有元素来构造新数组时,.map是合适的方法。forEach应该保留给有副作用的一般迭代,当您不试图构造新对象时。(当试图构建一个新对象,但它不是数组,或者新数组与旧数组不是一对一时,通常可以使用.reduce(

这是使用函数reduce构建所需输出的替代方法。

const a = ['aaa', 'z', 'eeeee'],
result = a.reduce((a, [m], i, arr) => {
let {length} = arr[i];
return a + m + (length <= 1 ? "" : length);
}, "");
console.log(result);

最新更新