Hap*_*s31 3 javascript arrays string function separator
定义一个函数,myJoin,最多接受两个参数:
arrayseparator (字符串,可选)myJoin应该返回一个字符串,其中将数组中的所有元素连接在一起。分隔符应分隔连接的元素:
myJoin(['a', 'b', 'c'], '+'); // => "a+b+c"
Run Code Online (Sandbox Code Playgroud)
如果未定义分隔符,则','用作默认分隔符。
myJoin(['Peter', 'Paul', 'Mary']); // => "Peter,Paul,Mary"
Run Code Online (Sandbox Code Playgroud)
如果数组中的任何元素是undefined或null,则应将它们替换为返回字符串中的空字符串。
myJoin(['hello', undefined, 'world'], '-'); // => "hello--world"
Run Code Online (Sandbox Code Playgroud)
我无法使用内置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'], '+'));
Run Code Online (Sandbox Code Playgroud)
^ 这不是将字符串的元素与分隔符组合在一起,实际上返回了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;
}
Run Code Online (Sandbox Code Playgroud)
这似乎在我的 VS Code 控制台中有效,但在 CodePen 中无效。
尝试
array.reduce( (s,x,i) => s+(i>0 ? separator : '') + (x==null ? '' : x), '')
Run Code Online (Sandbox Code Playgroud)
array.reduce( (s,x,i) => s+(i>0 ? separator : '') + (x==null ? '' : x), '')
Run Code Online (Sandbox Code Playgroud)
我们在这里使用标准的 js 功能:箭头函数、数组归约和三元运算符。如果i>0(不仅对第一个元素为真),我们将分隔符添加到输出字符串s。如果x是undefined或null我们添加到s空字符串-或者x值在其他情况下。