定义一个函数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中却没有。
function myJoin(array, separator=',') {
let str = '';
for (let i = 0; i < array.length; i++) {
if (array[i] !== null && array[i] !== undefined)
str += array[i];
if (i < array.length - 1)
str += separator;
}
return str;
}
console.log(myJoin(['a','b','c']));
console.log(myJoin(['a','b','c'], '+'));
console.log(myJoin(['a',null,'c'], '-'));
console.log(myJoin(['a','b',undefined], '.'));
尝试
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'], '-') );
一些提示:
=
)和比较(===
)运算符。 if(a = b)
在99%的案件中都是错误的。array.toString()
确实在内部调用array.join()
,我认为这是作弊,我也不确定你想用它做什么(我的意思是newString
应该已经包含想要的结果,如果你正确地执行循环,不应该吗?)i
是你的array
中使用array[i]
获得该位置值的指数。else {
分支中,我认为你根本不需要那个else
(因为你总是希望通过循环来加入数组)。newString =
你重新分配newString
并松开之前的值,你可能想使用newString +=
为它附加一个值。使用默认语法设置分隔符qazxsw poi a qazxsw poi接受qazxsw poi,||
,forEach
测试最后一个元素。
value
将index
和array
与模板字符串一起使用,如下所示:
function myJoin (array, separator) {
let newString = "";
separator = separator||',';
array.forEach((a,i,arr) => {
newString += `${a}${(i < arr.length-1) ? separator : ''}`;
});
return newString;
}
console.log(myJoin(['a', 'b', 'c'], '+'));
console.log(myJoin(['a', 'b', 'c']));
console.log(myJoin(['a', 'b', 'c'], '-'));
ES5语法:
map
您可以使用forEach
加入您的阵列。
function myJoin(arr, sep = ",") {
arr = arr.map(e => [undefined, null].includes(e) ? "" : e);
var result = "";
arr.forEach((e, i) => result += `${i ? sep : ""}${e}`);
return result;
}
console.log(myJoin(['Peter', undefined, 'Paul', null, 'Mary', 'Jack'], "-"));
希望这可以帮助,