不同方法的重构功能-javascript

时间:2018-11-13 01:11:51

标签: javascript

此函数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));

3 个答案:

答案 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);