【问题标题】:Why does reassigning work rather than just returning in concat?为什么重新分配工作而不是仅仅返回 concat?
【发布时间】:2021-03-12 14:51:25
【问题描述】:

只是想弄清楚为什么重新分配工作而不是仅仅返回。我知道可能有更好的方法可以做到这一点,但我只是想了解一下。

给定:const anArray = [1, 'foo', 2, 'bar']

 const getConcatenatedStr = (arr) => {
      let result = ''
      if (arr && arr.length > 1) {
         arr.forEach(() => {
            return result.concat('????', ' ')
         })
       } else {
         result = '????'
      }
      return result.trim()
   }

console.log('result one:', getConcatenatedStr(anArray))返回 '结果一:'

 const getConcatenatedStrReassign = (arr) => {
      let result = ''
      if (arr && arr.length > 1) {
         arr.forEach(() => {
            result = result.concat('????', ' ')
            return result
         })
       } else {
         result = '????'
      }
      return result.trim()
   }

console.log('result two: ', getConcatenatedStrReassign(anArray)) 返回 result two: ???? ???? ???? ????

当然,这也可以,等于getConcatenatedStrReassign

    // ...
      if (arr && arr.length > 1) {
            return result = result.concat('????', ' ')
         })
    // ...

【问题讨论】:

  • ?????????????????????????????????????????? ????????????????????????????????????
  • 我是得了癌症还是我只是看到表情符号?!

标签: javascript arrays string-concatenation


【解决方案1】:

forEach 将回调作为参数,并在数组的每个索引上执行回调并返回 undefined。因此,当您在第一个示例中的回调返回 result.concat() 时,您实际上只是返回 undefined 而不会连接。这就是第二个示例有效的原因,您实际上是在重新分配 result。第二个例子中的返回仍然是多余的,因为它所做的只是返回undefined。在此处查看Array.forEach 的文档以获得更多解释。

【讨论】:

  • 谢谢。那个“多余的”回报让我失望。我需要理解你所说的:forEach 返回未定义。这和@Gabriele 的评论Array.concat 没有修改源数组有很大帮助。
【解决方案2】:

因为forEach中的return只是从forEach返回你,而不是从函数返回

【讨论】:

    【解决方案3】:
    1. 你不需要从forEach返回任何东西
    2. String.concat 不会修改源字符串。

    所以如果你想继续添加,你需要重新分配。

    或者你可以这样做

    const anArray = [1, 'foo', 2, 'bar']
    const cools = anArray.map(() => '?').join(' ') || '?';
    
    console.log(cools);

    【讨论】:

    猜你喜欢
    • 2016-04-08
    • 2010-09-20
    • 2018-07-25
    • 1970-01-01
    • 2019-05-11
    • 2018-11-04
    • 1970-01-01
    • 1970-01-01
    • 2014-05-02
    相关资源
    最近更新 更多