将数组转换为字符串,使用分隔符分隔字符串-JavaScript
定义一个函数,将数组转换为字符串,使用分隔符分隔字符串-JavaScript,javascript,arrays,string,function,separator,Javascript,Arrays,String,Function,Separator,定义一个函数,myJoin,该函数最多接受两个参数: 数组 分隔符(字符串,可选) myJoin应返回一个字符串,其中数组中的所有元素都连接在一起。分隔符应分隔连接的图元: myJoin(['a', 'b', 'c'], '+'); // => "a+b+c" 如果未定义分隔符,请使用“”、“作为默认分隔符 myJoin(['Peter', 'Paul', 'Mary']); // => "Peter,Paul,Mary" 如果数组中的任何元素未定义或空,则应在返回的字符串中用空
myJoin
,该函数最多接受两个参数:
数组
分隔符
(字符串,可选)myJoin
应返回一个字符串,其中数组中的所有元素都连接在一起。分隔符应分隔连接的图元:
myJoin(['a', 'b', 'c'], '+'); // => "a+b+c"
如果未定义分隔符,请使用“”、“
作为默认分隔符
myJoin(['Peter', 'Paul', 'Mary']); // => "Peter,Paul,Mary"
如果数组中的任何元素未定义
或空
,则应在返回的字符串中用空字符串替换它们
myJoin(['hello', undefined, 'world'], '-'); // => "hello--world"
我不能使用内置的方法
到目前为止,我已经尝试:
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'], '+'));
这似乎在我的VS代码控制台中起作用,但在代码笔中不起作用。一些提示:
- 不要混淆赋值(
)运算符和比较(=
)运算符<代码>如果(a=b)在99%的情况下是错误的=
<> >代码>数组.toStrug()/Cult>确实调用内部的代码< >数组.Cube()/代码>内部,我认为这是作弊,我也不确定你想用它来实现什么(我的意思是<代码> NexStudio<代码>应该已经包含了想要的结果,如果你正确地做了循环,不是吗?)
是i
要获取该位置的值,请使用数组中的索引
array[i]
- 我不认为您的循环应该在
分支中,我认为您根本不需要else{
分支(因为您总是希望通过循环来加入数组)else
- 使用
重新分配newString=
并释放上一个值,您可能希望使用newString
向其追加一个值newString+=
array.reduce( (s,x,i) => s+(i>0 ? separator : '') + (x==null ? '' : x), '')
函数myJoin(数组,分隔符=','){
返回数组.reduce((s,x,i)=>s+(i>0?分隔符:“”)+(x==null?“”:x),“”)
}
log(myJoin(['a','b','c'],'+');
log(myJoin(['Peter','Paul','Mary']);
log(myJoin(['hello',未定义,'world'],'-');您可以使用它加入阵列
让arr=['a','b',未定义,'c','d',null',e'];
myJoin=(arr,分隔符=',')=>
arr.reduce((acc,val,i)=>
acc+([undefined,null].indexOf(val)>=0?'':val)+
(i console.log('arr.join(“+”)、arr.join('+');
使用map
和forEach
模板字符串,如下所示:
函数myJoin(arr,sep=“,”){
arr=arr.map(e=>[未定义,null]。包括(e)?“”:e);
var结果=”;
arr.forEach((e,i)=>result+=`${i?sep:“}${e}`);
返回结果;
}
log(myJoin(['Peter',未定义,'Paul',null,'Mary','Jack'],“-”);
函数myJoin(数组,分隔符=','){
设str='';
for(设i=0;i|
aforEach
接受值
,索引
,数组
测试最后一个元素
函数myJoin(数组、分隔符){
让newString=“”;
分隔符=分隔符| |',';
array.forEach((a,i,arr)=>{
newString+=`${a}${(i console.log(myJoin(['a','b','c'],'-');
你能解释你的代码吗?for循环的不应该在else
子句中,而if
测试中的比较应该是=
而不是=
(=
用于赋值)。当然,我想说的是,如果定义了分隔符,则在数组中循环创建一个带有数组中项目的newString
(I
)+分隔符
。然后将newString
转换为字符串并返回它。如果(分隔符=未定义),则代码if
正在将变量分隔符赋值给未定义的
值,而不是您期望的比较。不要在回答中使用内置的.join数组方法。
修复了它@Keith。请查看我最近的编辑-我已尝试尽可能多地利用您的提示进行构建。@happyHands31您还向t添加了分隔符最后一项,结果是“a,b,c”…因此我需要使用.pop()
或.slice()从返回的数组中删除最后一项
?对不起,我不明白参数…params
的用法。你能用参数数组
,分隔符
像我的代码一样重写它吗?@HappyHands31…params接受所有参数并用它组成一个数组。但是现在用这两个参数更容易理解谢谢-是的现在它是有意义的,并且是有效的。因此,对于两个if语句
,它在附加数组[i]之间交替进行
和分隔符
到str
?执行if语句
替换它们默认附加的内容?第一个if
检查您的值是否应该附加到字符串中(非空且非未定义)。第二个if
检查如果我们在数组的最后一项,我们没有放置分隔符(避免将分隔符放在末尾)separator=',表示“默认值”。因此,如果只提供一个参数,分隔符将设置为“,”。如果提供两个参数,则“,”将被第二个参数覆盖。为什么工作代码会在没有注释的情况下获得否决票?使用数组
array.reduce( (s,x,i) => s+(i>0 ? separator : '') + (x==null ? '' : x), '')