Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/439.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 在每个';n';指数_Javascript_Arrays - Fatal编程技术网

Javascript 在每个';n';指数

Javascript 在每个';n';指数,javascript,arrays,Javascript,Arrays,原生JS。 例如,有两个数组 arr1 = ['orange', 'blue', 'red', 'black', 'white', 'magenta', 'cyan'] arr2 = [1, 2, 3] 我需要一个函数,它结合了这两个数组,像这样 function arrInsertAfter(arr1, arr2, afterElement) // for example make afterElement = 2 - insert element of second array afte

原生JS。 例如,有两个数组

arr1 = ['orange', 'blue', 'red', 'black', 'white', 'magenta', 'cyan']
arr2 = [1, 2, 3]
我需要一个函数,它结合了这两个数组,像这样

function arrInsertAfter(arr1, arr2, afterElement) 
// for example make afterElement = 2 - insert element of second array after each 2 elements of first array

....
结果应该是

['orange', 'blue', 1, 'red', 'black', 2, 'white', 'magenta', 3, 'cyan']
例如,如果
afterElement=3
,它应该返回

['orange', 'blue', 'red', 1, 'black', 'white', 'magenta', 2, 'cyan', 3] // append remaining elements of second array at the end simply
重要的是不要使用任何第三方连接的lib

这是我的功能

let arr1 = ['orange', 'blue', 'red', 'black', 'white', 'magenta', 'cyan'],
        arr2 = [1, 2, 3];

function arrInsertAfter(arr1, arr2, afterElement) {

        let curPos = afterElement;

        arr2.forEach(function(e) {
            arr1.splice(curPos, 0, e);
            curPos = afterElement+curPos+1;
        });

        return arr1;

    }
与传统循环

  function arrInsertAfter(arr1, arr2, afterElement) {

    let curPos = afterElement;

      for (let i = 0; i < arr2.length; i++) {
        arr1.splice(curPos, 0, arr2[i]);
        curPos = (curPos+afterElement)+1;
      }     

      return true;
    }

    arrInsertAfter(arr1, arr2, 2);

    alert(arr1);
函数arrInsertAfter(arr1、arr2、afterElement){
设curPos=afterElement;
for(设i=0;i
这应该可以:)

函数arrInsertAfter(arr1、arr2、afterElement){
结果=[];
对于(变量i=1;arr2.length>0 | | arr1.length>0;i++){
如果(arr1.长度>0){
结果.推(arr1.shift());
}
if(i%afterElement==0&&arr2.length>0){
结果.推(arr2.shift());
}
}
返回结果;
}
常量arr1=[‘橙色’、‘蓝色’、‘红色’、‘黑色’、‘白色’、‘洋红’、‘青色’];
常数arr2=[1,2,3];
结果=arrInsertAfter(arr1,arr2,3);

控制台日志(结果)在回调函数中正在变异的数组上使用
forEach
可能会很棘手。这里有一种变异方法,使用传统循环和
splice
在特定索引位置将元素添加到
a
数组中:

函数arrInsertAfter(a、b、after){
设j=0;
for(设i=after;i控制台日志(arr1)您可以复制并在正确的位置拼接元件

函数insertAfter(array1、array2、n){
var temp=array1.slice();
阵列2.forEach((v,i)=>温度拼接((i+1)*n+i,0,v));
返回温度;
}
log(insertAfter(['orange','blue','red','black','white','magenta','cyan'],[1,2,3,2]);
log(insertAfter(['orange','blue','red','black','white','magenta','cyan'],[1,2,3,3])

。作为控制台包装{max height:100%!important;top:0;}
您自己是否尝试过编写这样的函数?请发布您尝试过的代码。请记住,插入元素时,后续元素的索引将递增。因此,如果在每秒钟之后插入3个元素,则在1之后插入,然后插入4个,然后插入7个。对不起,是的,我做了,但忘记了保存当前位置并在元素之后增加received
afterElement
。。。结果是错误的,当“afterElement”的值足够公平,可以等分第一个数组时,这就起作用了。但是当这个数字不能除以第一个数组时失败。你是什么意思?即使“afterElement”大于任何数组的大小,它也可以工作。它只是将第二个数组的项放在末尾。例如,使用:arr1=[‘橙色’、‘蓝色’、‘红色’、‘黑色’、‘白色’、‘洋红’、‘青色’];arr2=[1,2,3];控制台日志(arrInsertAfter(arr1,arr2,10));你得到[‘橙色’、‘蓝色’、‘红色’、‘黑色’、‘白色’、‘品红’、‘青色’、1,2,3];这是关于编辑答案之前的代码:)。您以前的代码将无法工作<代码>函数arrInsertAfter(arr1,arr2,afterElement){result=[]for(var i=1;arr2.length>0;i++){result.push(arr1.shift());if(i%afterElement==0){result.push(arr2.shift());}返回结果;}
哦,对不起,我以为注释是在编辑之后!Thx,但如果我需要转换当前数组(arr1),我可以使用我问题中UPD2中的代码吗?您的方法似乎也可以。我还没有用可能的边缘案例对这些进行彻底测试,但似乎不应该有太多这样的案例。