Javascript 从阵列中丢失数据

Javascript 从阵列中丢失数据,javascript,arrays,Javascript,Arrays,我正在从一个数组中切片3个元素,并将它们存储到另一个数组中 array = [1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1]; rows = 3; 这是我的方法 getVertWallStruct = (array, rows) => { let i = 1, storageArr = [], data = []; for (let k = 0; k < rows*2; k

我正在从一个数组中切片3个元素,并将它们存储到另一个数组中

array = [1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1];
rows = 3;
这是我的方法

getVertWallStruct = (array, rows) => {
    let i = 1,
        storageArr = [],
        data = [];

    for (let k = 0; k < rows*2; k++) { // everything's ok here
      storageArr.push(array.slice(k*rows, (k+1)*rows));
    }

    data = storageArr;

    console.log("storageArr - ", storageArr, " , array - ", array, " , data - ", data);

    return data;
  }
为什么我会失去价值

更新: 即使我从其中一个答案复制粘贴的代码,方法也会返回空的数据。为什么?

代码如下所示:

getVertWallStruct = (array, rows) => {
    console.log(array, rows); //okay here
   
    let iterator = array.values()
    let out = []
    for (let i = 0;i < ~~(array.length / rows); i++){
      out.push([iterator.next().value, iterator.next().value, iterator.next().value])
    }
    console.log(out); //empty ???
    
    return out;
  }
getVertWallStruct=(数组,行)=>{
console.log(数组,行);//这里可以
让迭代器=array.values()
放出=[]
对于(设i=0;i<~~(array.length/行);i++){
out.push([iterator.next().value,iterator.next().value,iterator.next().value])
}
console.log(out);//空???
返回;
}

一种可能的方法是使用数组迭代器:

方法返回一个新的数组迭代器对象,该对象包含 数组中每个索引的值。

常量数组=[1,1,1,0,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1] 让迭代器=array.values() 放出=[] 对于(设i=0;i<~~(array.length/3);i++){ out.push([iterator.next().value,iterator.next().value,iterator.next().value]) }
console.log(out)每次索引可被行数整除时,使用reduce,将空白数组推入累加器。将当前项推入累加器中的最后一个数组

常量数组=[1,1,1,0,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1]; const rowify=(数组,行)=>array.reduce((结果,当前,索引)=>{ 如果(索引%rows==0){ 结果:push([]); } 结果[results.length-1]。推送(当前); 返回结果; }, []);
log(rowify(array,3))
arr=array
在这里毫无意义。只需重新命名参数。同样地,
data=storageArr
。直接
返回storageArr
。请记住,在JavaScript中,对象不会复制对象,这意味着
x
y
指的是同一个对象。为什么将它们分组为3块时
k
?应该是
k
?或者您打算使用pairs但得到三元组?它是空的,因为您从未直接接触过它,您将它声明为空数组,然后抛出该空数组,并将其作为
storageArr
的别名。你能解释一下代码在当前的形式下做了什么,以及它是如何不正确的吗?现在还不清楚你所说的“失去价值”是什么意思。@LirysJH你到底想实现什么?为什么
i你是对的,我在使用
问题仍然存在。方法返回空数据
getVertWallStruct = (array, rows) => {
    console.log(array, rows); //okay here
   
    let iterator = array.values()
    let out = []
    for (let i = 0;i < ~~(array.length / rows); i++){
      out.push([iterator.next().value, iterator.next().value, iterator.next().value])
    }
    console.log(out); //empty ???
    
    return out;
  }