Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/silverlight/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在每个nt-h数组元素之后插入新元素_Javascript_Arrays - Fatal编程技术网

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);

根据给定的示例数组ab(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
根据给定的示例数组ab,您可以尝试以下代码以获得预期的输出

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
every
N
元素。此外,逻辑被包装在函数中

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");