Javascript 在每个nt-h数组元素之后插入新元素
我有一个名为Javascript 在每个nt-h数组元素之后插入新元素,javascript,arrays,Javascript,Arrays,我有一个名为a的数组,我想在数组a的每个nt-h元素之后插入一个元素。例如,我想将字符串XXX放在数组a的每个3元素之后,结果得到一个新数组b,如下一个示例所示: 设a=[undefined,”,0,[],“ee”,false,null,{},Date(),true,(z)=>2*z,数组(0),NaN]; 设b=[未定义,“”,0,“XXX”,[],“ee”,false,“XXX”,null,{},Date(),“XXX”,true,(z)=>2*z,[],“XXX”,NaN]; 控制台日志
a
的数组,我想在数组a
的每个nt-h
元素之后插入一个元素。例如,我想将字符串XXX
放在数组a
的每个3
元素之后,结果得到一个新数组b
,如下一个示例所示:
设a=[undefined,”,0,[],“ee”,false,null,{},Date(),true,(z)=>2*z,数组(0),NaN];
设b=[未定义,“”,0,“XXX”,[],“ee”,false,“XXX”,null,{},Date(),“XXX”,true,(z)=>2*z,[],“XXX”,NaN];
控制台日志(a,b)
对于reduce()
或仅仅是for
循环,这可能是一个更好的例子map()
将始终为您提供相同大小的新数组。如果你对结尾和开头都很小心,你应该能够在一般情况下使用类似的东西
让arr=[1,2,3,4,5,6,7,8,9,10]
函数插入\u后(arr,str,n){
返回arr.reduce((arr,item,i)=>{
到货推送(项目)
如果(i%n==n-1)arr.push(str)
返回arr
}, [])
}
log(在(arr,'x',2.join(',')之后插入_)
console.log(在(arr,'x',3.join(','))之后插入_)
对于reduce()
或仅仅是循环可能更好map()
将始终为您提供相同大小的新数组。如果你对结尾和开头都很小心,你应该能够在一般情况下使用类似的东西
让arr=[1,2,3,4,5,6,7,8,9,10]
函数插入\u后(arr,str,n){
返回arr.reduce((arr,item,i)=>{
到货推送(项目)
如果(i%n==n-1)arr.push(str)
返回arr
}, [])
}
log(在(arr,'x',2.join(',')之后插入_)
log(在(arr,'x',3)之后插入_)。join(',')
在您的示例中,您可以将其推送,但不能推送到元素之后。
如果要使用map
,可以使用apply
推送一个或两个元素
a=[1,2,3,4,5,6,7,8,9,10]
b=[]
a、 map((x,i)=>Array.prototype.push.apply(b,(i+1)%3?[x]:[x,“XXX”]))
console.log(b.join(','))
在您的示例中,您可以改为在元素之后推送。
如果要使用map
,可以使用apply
推送一个或两个元素
a=[1,2,3,4,5,6,7,8,9,10]
b=[]
a、 map((x,i)=>Array.prototype.push.apply(b,(i+1)%3?[x]:[x,“XXX”]))
console.log(b.join(“,”)
设a=[undefined,”,0,[],“ee”,false,null,{},Date(),true,(z)=>2*z,数组(0),NaN];
设n=3+1;
设currentPosition=3;
设temp='xxxxxx';
log('Before assignment::',a.length,a);
而(当前位置
设a=[undefined,”,0,[],“ee”,false,null,{},Date(),true,(z)=>2*z,数组(0),NaN];
设n=3+1;
设currentPosition=3;
设temp='xxxxxx';
log('Before assignment::',a.length,a);
根据给定的示例数组a和b(currentPosition),您可以尝试以下代码以获得预期的输出
let a= [undefined, "", 0, Array(0), "eeeeeeeeee", null, "cccccccc", "bbbbbbb", "ddddddddd", Array(0), "bbbbbbb", {}, undefined, "bbbbbbb", {}, null, 0, "ddddddddd", null, "eeeeeeeeee", "ddddddddd", "bbbbbbb", undefined, "cccccccc", "ddddddddd", "ddddddddd", undefined, undefined, "eeeeeeeeee", {}, "", "", undefined, "", "eeeeeeeeee", undefined, Array(0), Array(0), 0, "ddddddddd", "", "", null, null, "bbbbbbb", "", Array(0), null, "ddddddddd", {}];
let b = [];
let j = 0, insertIndex = 15;
let insertVal = "INSERT_VAL";
for(let i=0; i< a.length;){
b[j++] = a[i++];
if(i%insertIndex ==0){
b[j++] = insertVal;
}
}
console.log(b);
设a=[undefined,”,0,数组(0),“eeeeeeee”,null,“cccccccc”,“bbbbbbb”,“dddddddd”,数组(0),“bbbbbbbbb”,“{},undefined”,“bbbbbbbbb”,“undefined”,“eeeeeeee”,“dddddddddddd”,“bbbbbbbbbbb”,undefined,“cccccccc”,“dddddddddddddd”,“undefined”,“eeeeeeeeeeeeee”,“undefined”,“eeeeeeeeeeeeeeeeeeeeeeee”,“dddddddddddddddd”,“dddddddddddddddddddddddddddddddddd”,“undefined”,“undefined”,“未定义,未定义的,未定义的,未定义的,未定义的,未定义的,未定义,数组(0),数组(0),0,“ddddddd”,“”,“”,“”,null,null,“bbbbb”,“”,数组(0),null,“ddddddd”,{};
设b=[];
设j=0,insertIndex=15;
let insertVal=“INSERT_VAL”;
for(设i=0;i
根据给定的示例数组a和b,您可以尝试以下代码以获得预期的输出
let a= [undefined, "", 0, Array(0), "eeeeeeeeee", null, "cccccccc", "bbbbbbb", "ddddddddd", Array(0), "bbbbbbb", {}, undefined, "bbbbbbb", {}, null, 0, "ddddddddd", null, "eeeeeeeeee", "ddddddddd", "bbbbbbb", undefined, "cccccccc", "ddddddddd", "ddddddddd", undefined, undefined, "eeeeeeeeee", {}, "", "", undefined, "", "eeeeeeeeee", undefined, Array(0), Array(0), 0, "ddddddddd", "", "", null, null, "bbbbbbb", "", Array(0), null, "ddddddddd", {}];
let b = [];
let j = 0, insertIndex = 15;
let insertVal = "INSERT_VAL";
for(let i=0; i< a.length;){
b[j++] = a[i++];
if(i%insertIndex ==0){
b[j++] = insertVal;
}
}
console.log(b);
设a=[undefined,”,0,数组(0),“eeeeeeee”,null,“cccccccc”,“bbbbbbb”,“dddddddd”,数组(0),“bbbbbbbbb”,“{},undefined”,“bbbbbbbbb”,“undefined”,“eeeeeeee”,“dddddddddddd”,“bbbbbbbbbbb”,undefined,“cccccccc”,“dddddddddddddd”,“undefined”,“eeeeeeeeeeeeee”,“undefined”,“eeeeeeeeeeeeeeeeeeeeeeee”,“dddddddddddddddd”,“dddddddddddddddddddddddddddddddddd”,“undefined”,“undefined”,“未定义,未定义的,未定义的,未定义的,未定义的,未定义的,未定义,数组(0),数组(0),0,“ddddddd”,“”,“”,“”,null,null,“bbbbb”,“”,数组(0),null,“ddddddd”,{};
设b=[];
设j=0,insertIndex=15;
let insertVal=“INSERT_VAL”;
for(设i=0;i
这是一个解决方案,它使用while
循环,方法是插入令牌
每个N
元素。此外,逻辑被包装在函数中
let insertTokenEveryN=(arr,token,n)=>{
//克隆接收到的数组,这样我们就不会变异
//原版的。如果你不介意的话,可以忽略这个。
设a=arr.slice(0);
//插入每个元素。
设idx=n;
while(idx这是一个解决方案,它使用while
循环,方法是插入token
everyN
元素。此外,逻辑被包装在函数中
let insertTokenEveryN=(arr,token,n)=>{
//克隆接收到的数组,这样我们就不会变异
//原版的。如果你不介意的话,可以忽略这个。
设a=arr.slice(0);
//插入每个元素。
设idx=n;
而(idx受到答案的启发,我使用map和reduce(时间复杂度O(n))为不可变解决方案提供了oneliners)
就地解决方案(导致a
,复杂性O(n/k))
我读了你们所有的答案并给出+1,因为他们很有趣,很难选择最好的,但最后我选择了,因为他首先表明我们可以将时间复杂度从O(n)降低到O(n/k),其中n是
for(let i=a.length/k|0; i; i--) a.splice(i*k,0,"XXX");