javascript - 将数组转换为字符串,用分隔符分隔字符串 - JavaScript
问题描述
定义一个函数 ,myJoin
最多接受两个参数:
array
separator
(字符串,可选)
myJoin
应该返回一个字符串,将数组中的所有元素连接在一起。分隔符应分隔连接的元素:
myJoin(['a', 'b', 'c'], '+'); // => "a+b+c"
如果未定义分隔符,则','
用作默认分隔符。
myJoin(['Peter', 'Paul', 'Mary']); // => "Peter,Paul,Mary"
如果数组中的任何元素是undefined
或null
,则应在返回的字符串中将它们替换为空字符串。
myJoin(['hello', undefined, 'world'], '-'); // => "hello--world"
我不能使用内置join
方法。
到目前为止,我已经尝试过:
function myJoin (array, separator) {
let newString = "";
if (separator = undefined) {
separator === ",";
}
else {
for (let i = 0; i < array.length; i++) {
newString = i + separator;
}
}
newString = array.toString();
return newString;
}
console.log(myJoin(['a', 'b', 'c'], '+'));
^ 这不是将字符串的元素与分隔符组合在一起,实际上是返回a,b,c
两次。知道为什么吗?
编辑:在@Jonas Wilms 的建议之后首次更新代码:
function myJoin (array, separator) {
let newString = "";
if (separator === undefined) {
separator === ",";
}
for (let i = 0; i < array.length; i++) {
newString += array[i] + separator;
}
return newString;
}
这似乎在我的 VS Code 控制台中有效,但在 CodePen 中无效。
解决方案
尝试
array.reduce( (s,x,i) => s+(i>0 ? separator : '') + (x==null ? '' : x), '')
function myJoin(array, separator=',') {
return array.reduce( (s,x,i) => s+(i>0 ? separator : '') + (x==null ? '' : x), '')
}
console.log( myJoin(['a', 'b', 'c'], '+') );
console.log( myJoin(['Peter', 'Paul', 'Mary']) );
console.log( myJoin(['hello', undefined, 'world'], '-') );
我们在这里使用标准的 js 功能:箭头函数、数组归约和三元运算符。如果i>0
(仅对第一个元素不成立)我们将分隔符添加到输出字符串s
。如果未定义或为空x
,我们将添加到空字符串 - 或在其他情况下添加值。s
x
推荐阅读
- python - 从大列表中删除重复项,但如果确实存在则删除两者?
- google-calendar-api - 添加到谷歌日历选项切断一些描述内容
- twilio - 如何从 Twilio Studio 创建一个 http 请求
- stored-procedures - 使用存储过程透视表
- tfs - 是否可以从 TFS(或 Azure DevOps)导出/导入板配置
- grep - 显示不以一个或多个字母开头且不以一个或多个数字结尾的行
- node.js - 导出带有添加方法的模块返回对象
- reactjs - useEffect 更新后的本地状态行为
- arduino - 如何使用 Arduino Uno 在不同状态之间切换?
- python - 按索引访问 Python 列表