将数组转换为字符串,使用分隔符分隔字符串 - JavaScript
Turn Array Into String, Separate String With Separator - JavaScript
定义一个函数,myJoin
,最多接受两个参数:
array
separator
(字符串,可选)
myJoin
应该 return 一个将数组中的所有元素连接在一起的字符串。分隔符应该分隔连接的元素:
myJoin(['a', 'b', 'c'], '+'); // => "a+b+c"
如果未定义分隔符,使用 ','
作为默认分隔符。
myJoin(['Peter', 'Paul', 'Mary']); // => "Peter,Paul,Mary"
如果数组中的任何元素是 undefined
或 null
,则应将其替换为 returned 字符串中的空字符串。
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'], '+'));
^ 这不是将字符串的元素与分隔符组合在一起,实际上是 returning 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 中无效。
一些提示:
不要混淆赋值 (=
) 和比较 (===
) 运算符。 if(a = b)
在 99% 的情况下都是错误的。
array.toString()
确实在内部调用 array.join()
,我认为这是作弊,而且我不确定你想用它实现什么(我的意思是 [=如果您正确执行循环,15=] 应该已经包含想要的结果,不是吗?)
i
是 array
中的索引,用于在该位置使用 array[i]
获得 值 。
我认为你的循环不应该在 else {
分支中,我认为你根本不需要那个 else
(因为你总是想要通过循环加入数组)。
with newString =
你 重新分配 newString
并丢失以前的值,你可能想使用 newString +=
附加一个值。
尝试
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 功能:arrow functions, array reduce and ternary operator. If i>0
(not true only for first element) we add separator to output string s
. If x
is undefined or null 我们添加到 s
空字符串 - 或者在其他情况下 x
值。
您可以使用 Array.reduce()
加入您的阵列。
let arr = ['a', 'b', undefined, 'c', 'd', null, 'e'];
myJoin = (arr, separator = ',') =>
arr.reduce((acc, val, i) =>
acc + ([undefined, null].indexOf(val) >= 0 ? '' : val) +
(i < arr.length - 1 ? separator : ''), "");
console.log('myJoin(arr): ', myJoin(arr));
console.log('myJoin(arr, "+"): ', myJoin(arr, '+'));
console.log('arr.join("+"): ', arr.join('+'));
希望这对您有所帮助,
将 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'], "-"));
ES5 语法:
function myJoin(arr, sep) {
sep = sep || ",";
arr = arr.map(function(e) {
return [undefined, null].includes(e) ? "" : e;
});
var result = "";
arr.forEach(function(e, i) {
result += (i ? sep : "") + e;
});
return result;
}
console.log(myJoin(['Peter', undefined, 'Paul', null, 'Mary', 'Jack'], "-"));
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], '.'));
使用默认语法设置分隔符||
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'], '-'));
定义一个函数,myJoin
,最多接受两个参数:
array
separator
(字符串,可选)
myJoin
应该 return 一个将数组中的所有元素连接在一起的字符串。分隔符应该分隔连接的元素:
myJoin(['a', 'b', 'c'], '+'); // => "a+b+c"
如果未定义分隔符,使用 ','
作为默认分隔符。
myJoin(['Peter', 'Paul', 'Mary']); // => "Peter,Paul,Mary"
如果数组中的任何元素是 undefined
或 null
,则应将其替换为 returned 字符串中的空字符串。
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'], '+'));
^ 这不是将字符串的元素与分隔符组合在一起,实际上是 returning 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 中无效。
一些提示:
不要混淆赋值 (
=
) 和比较 (===
) 运算符。if(a = b)
在 99% 的情况下都是错误的。array.toString()
确实在内部调用array.join()
,我认为这是作弊,而且我不确定你想用它实现什么(我的意思是 [=如果您正确执行循环,15=] 应该已经包含想要的结果,不是吗?)i
是array
中的索引,用于在该位置使用array[i]
获得 值 。我认为你的循环不应该在
else {
分支中,我认为你根本不需要那个else
(因为你总是想要通过循环加入数组)。with
newString =
你 重新分配newString
并丢失以前的值,你可能想使用newString +=
附加一个值。
尝试
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 功能:arrow functions, array reduce and ternary operator. If i>0
(not true only for first element) we add separator to output string s
. If x
is undefined or null 我们添加到 s
空字符串 - 或者在其他情况下 x
值。
您可以使用 Array.reduce()
加入您的阵列。
let arr = ['a', 'b', undefined, 'c', 'd', null, 'e'];
myJoin = (arr, separator = ',') =>
arr.reduce((acc, val, i) =>
acc + ([undefined, null].indexOf(val) >= 0 ? '' : val) +
(i < arr.length - 1 ? separator : ''), "");
console.log('myJoin(arr): ', myJoin(arr));
console.log('myJoin(arr, "+"): ', myJoin(arr, '+'));
console.log('arr.join("+"): ', arr.join('+'));
希望这对您有所帮助,
将 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'], "-"));
ES5 语法:
function myJoin(arr, sep) {
sep = sep || ",";
arr = arr.map(function(e) {
return [undefined, null].includes(e) ? "" : e;
});
var result = "";
arr.forEach(function(e, i) {
result += (i ? sep : "") + e;
});
return result;
}
console.log(myJoin(['Peter', undefined, 'Paul', null, 'Mary', 'Jack'], "-"));
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], '.'));
使用默认语法设置分隔符||
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'], '-'));