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将所有元素向前推一个_Javascript_Arrays - Fatal编程技术网

使用数组的数组:如何使用javascript将所有元素向前推一个

使用数组的数组:如何使用javascript将所有元素向前推一个,javascript,arrays,Javascript,Arrays,这是我的数组: arr_1 = [1,2,3] arr_2 = [4,5,6] arr_3 = [7,8,9] arr = [arr_1, arr_2, arr_3] arr = [[1,2,3], [4,5,6], [7,8,9]] 我要做的是像这样推送所有元素,以便最终数组如下所示,并在数组的开头插入另一个元素: arr = [[i,1,2], [3,4,5], [6,7,8], [9]] 所有子数组不能超过3个元素。 谢谢您的帮助。您可以使用功能reduce var arr=[[1

这是我的数组:

arr_1 = [1,2,3]
arr_2 = [4,5,6]
arr_3 = [7,8,9]

arr = [arr_1, arr_2, arr_3]
arr = [[1,2,3], [4,5,6], [7,8,9]]
我要做的是像这样推送所有元素,以便最终数组如下所示,并在数组的开头插入另一个元素:

arr = [[i,1,2], [3,4,5], [6,7,8], [9]]
所有子数组不能超过3个元素。


谢谢您的帮助。

您可以使用功能
reduce

var arr=[[1,2,3],[4,5,6],[7,8,9],
newElem=“newOne”,
all=[newElem,…arr.reduce((a,c)=>[…a,…c],],//全部加在一起
//生成所需输出,询问以下结果:
//元素mod 3==0
结果=all.reduce((a,c,i)=>{
如果(i%3==0)a.push([c]);
否则a[a.length-1]。推(c);
返回a;
}, []);
控制台日志(结果)

.as console wrapper{max height:100%!important;top:0;}
您可以访问所有内部数组,并从上一个循环中取消移位剩余值

var数组=[[1,2,3]、[4,5,6]、[7,8,9]],
区块=3,
项目='x',
i=0,
温度=[项目];
while(ilog(array.map(a=>a.join(“”))您可以在每次迭代中将上一个数组中的最后一个元素移动到下一个数组中,如果最后一个子数组中的元素多于3个,则删除最后一个元素并将其添加到新数组中

让arr_1=[1,2,3],
arr_2=[4,5,6],
arr_3=[7,8,9],
arr=[arr_1,arr_2,arr_3]
setInterval(函数(){
const last=arr.length-1;
const newElement=parseInt(Math.random()*30)
arr.forEach((a,i)=>{
如果(i==0)a.unshift(新元素);
if(arr[i+1])arr[i+1].unshift(a.pop())
否则如果(arr[last].length>3)arr[last+1]=[arr[last].pop()]
})
log(JSON.stringify(arr))
},1000)
arr_1=[1,2,3]
arr_2=[4,5,6]
arr_3=[7,8,9]
arr=[
[1, 2, 3],
[4, 5, 6],
[7, 8, 9]
]
函数重新分配块(x){
//创建一个用于存储未包装值的数组
var newArray=[];
arr.forEach(功能(要素){
newArray.push(…elem);//使用扩展运算符展开值
});
newArray.unshift(x,限制)
var modArray=[];
var m,j,temparray,chunk=3;
对于(m=0;m

arr=[[i,1,2],[3,4,5],[6,7,8],[9]
假设所有元素都是数字,您可以这样做:

  • i
    前置到数组
  • 展平阵列
  • 将数组转换为逗号分隔的字符串
  • 将字符串拆分为最多3个数字子字符串(2个逗号)的块
  • 将数据块转换回数字数组
  • const arr_1=[1,2,3];
    常数arr_2=[4,5,6];
    常数arr_3=[7,8,9];
    常数i=42;
    常量结果=[i,…arr_1,…arr_2,…arr_3].join()
    .match(/(?:[^,]+(,|$){1,2}[^,]*/g).map(x=>x.split(',').map(数字))
    ;
    
    控制台日志(结果)您可以通过一个简单的展开/ravel非常简洁地完成这项工作。调整组大小也很容易

    让arr=[[1,2,3],[4,5,6],[7,8,9]]
    设newEl=0
    设groupSize=3
    var newArr=[];
    var unravelled=arr.reduce((a,c)=>a.concat(c),[newEl])
    while(unravelled.length)newArr.push(unravelled.splice(0,groupSize));
    
    console.log(newArr)
    您可以按如下方式简单地执行2d取消移位

    var arr_1=[1,2,3],
    arr_2=[4,5,6],
    arr_3=[7,8,9],
    arr=[arr_1,arr_2,arr_3],
    us2d=(a2d,…is)=>is.concat(…a2d)
    .reduce((r,e,i)=>(i%3?r[r.length-1]。推(e)
    :r.push([e]),r),[]);
    log(JSON.stringify(us2d(arr,0));
    
    log(JSON.stringify(us2d(arr,-2,-1,0))
    很抱歉,但是为什么您的答案中有css?@information\u interchange只是为了扩展堆栈控制台。有趣的是……我认为在使用
    取消移位
    拼接
    的大型阵列上这会有点慢,但它似乎比其他答案快一个数量级。