这个函数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));
您可以构造并立即返回一个map
ped数组,该数组由空字符串连接:
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);