JS:使用Realding方法编写一个JOIN函数.. console.log函数返回不正确的输出



我想使用deluds编写一个联接功能。它需要两个参数,一个数组才能操作和一个定界符。该功能将返回字符串。定界符可以是可选的,如果没有给出,则应默认为','。

以下是我的代码:

var arrayOfStrings = ['a', 'b', 'c'];
function join (arr, delim=',') {
  return arr.reduce((a,e) => {
    return a+e+delim;
  }, '')
}

当我调用输出'a,b,c'下方的功能时,看起来正确:

join(arrayOfStrings)

但是,当我在控制台内调用功能时,输出返回不正确;

console.log('should join elements in array together into a string: ', 
  join(arrayOfStrings) === 'a,b,c'
);

输出:

should join elements in array together into a string:  false
=> undefined

'a,b,c,'看起来正确

否,因为您当前的代码会导致尾随逗号,但是您希望没有尾随的逗号,因为它看起来是从测试中看的:

console.log('should join elements in array together into a string: ', 
  join(arrayOfStrings) === 'a,b,c'
);

我只有在累加器中已经有一些东西(因此在第一次迭代中不添加定界符(时,我只有有条件地添加定界符(:

var arrayOfStrings = ['a', 'b', 'c'];
function join(arr, delim = ',') {
  return arr.reduce((a, item) => a ? a + delim + item : item, '');
  /* equivalent to:
  return arr.reduce((a, item) => {
    if (a) {
      // add delimiter before concatenating the next item if the "a" string is not empty
      return a + delim + item;
    } else {
      return item;
    }
  }, '');
  */
}
console.log('should join elements in array together into a string: ',
  join(arrayOfStrings) === 'a,b,c'
);

如果您知道arrayOfStrings始终包含至少一个字符串,则可以避免将初始值传递给reduce,并且会使用数组中的第一项,允许您无条件地将累加器与一个与一个累加器相关。定界符和下一个字符串:

var arrayOfStrings = ['a', 'b', 'c'];
function join(arr, delim = ',') {
  return arr.reduce((a, item) => a + delim + item);
}
console.log('should join elements in array together into a string: ',
  join(arrayOfStrings) === 'a,b,c'
);

相关内容

最新更新