如何解决为什么重新分配工作而不只是在 concat 中返回?
只是想弄清楚为什么重新分配有效而不是仅仅返回。我知道可能有更好的方法来做到这一点,但我只是想了解一下。
给定: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('?',' ')
})
// ...
解决方法
- 您不需要从
forEach
返回任何内容 -
String.concat
不修改源字符串。
所以如果你想继续添加它,你需要重新分配。
或者你可以这样做
const anArray = [1,'foo',2,'bar']
const cools = anArray.map(() => '?').join(' ') || '?';
console.log(cools);
因为 TEST <- df %>% group_by(col1,AnyNameIWant = paste0(col3,col4))
中的 return
只是从 forEach
返回你,而不是从函数中返回
forEach
将回调作为参数,并对数组的每个索引执行该回调并返回 undefined
。因此,当您在第一个示例中的回调返回 result.concat()
时,您实际上只是在返回 undefined
而不是串联。这就是第二个示例有效的原因,您实际上是在重新分配 result
。第二个示例中的 return 仍然是多余的,因为它所做的只是 return undefined
。在此处查看 Array.forEach
的文档以获得更多解释。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。