此函数current接收一个数组,如果元素的长度大于1,则向其输出一个带有其计数的字符
有没有办法使用相同的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));
答案 0 :(得分:1)
您可以仅使用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));
答案 1 :(得分:1)
您可以构造并立即返回一个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
)
答案 2 :(得分:1)
这是使用函数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);