迭代多维javascript数组并创建新数组?

时间:2016-08-12 12:42:19

标签: javascript arrays multidimensional-array

我有一个包含一些字符串数据的多维JavaScript数组。

var array = [];

array[0] = ["A","B","C"];  
array[1] = ["G","H"];  

我想将这些合并到一个新数组中。

第一个数组的值1应该与数组2中的值1合并,依此类推。

当然,我可以这样做。

var array2 = array[0][0] + array[1][0];

但我没有数据,所以第一个数组可以容纳6个值,也可能有2个以上的数组。

有没有办法动态迭代多维数组并创建一个新数组。

4 个答案:

答案 0 :(得分:1)

您可以使用 Array#map Array#join 方法。

// iterate over multi diamensional array and
// generate array with first element of each nested array
var array2 = array.map(function(v){ 
   // retrieve the first element
   return v[0]; 
   // join them to convert into a string as your output
}).join('')



var array = [];

array[0] = ["A", "B", "C"];
array[1] = ["G", "H"];

var array2 = array.map(function(v) {
  return v[0];
}).join('')

console.log(array2);




如果您想对所有索引执行相同操作,请使用 Array#reduce 方法。



var array = [];

array[0] = ["A", "B", "C"];
array[1] = ["G", "H"];

// iterate and reduce a single array
var array2 = array.reduce(function(arr, e) {
  // iterate over nested array 
  e.forEach(function(v, i) {
    // concatenate with the elements in parent array
    arr[i] = (arr[i] || '') + v;
  });
  return arr
  // set initial value as array
}, [])

console.log(array2);




答案 1 :(得分:0)

最简洁的写作方式如下:

arrays[0].map((_, i) => arrays.map(array => array[i]).join(''))

打破它:

arrays[0]                     // Starting with the first sub-array,
  .map(                       // create a corresponding array 
    (_, i) =>                 // whose value, for each index is,
      arrays                  // for each of the sub-arrays,
        .map(                 // an array whose values are
          array => array[i])  // the subarray at that index
        )
        .join('')             // with its elements joined together
  );

答案 2 :(得分:0)

我相信你需要做这样的事情:

myArray = [["s","m","a"],["d","f"],["t","h","r"]];

function generateStrings(array2d){
    newArray = [];

    function interate(n){
     newString = myArray.reduce((p,c)=>{return c[n]?p+c[n]:p},"")  
     console.log(newString)
     if (newString)newArray.push(newString),interate(n+1)
    }
    interate(0)

    return newArray;
}


generateStrings(myArray);

答案 3 :(得分:0)

您可以使用简单的reduce函数来合并Array。

const arr = [ [1, 2, 3], [4, 5] ];
const newArr = arr.reduce((acc, x) => [...acc, ...x], [])

console.log(newArr) // [1, 2, 3, 4, 5]

如果您需要在合并后创建String对象,则只需在返回的数组上应用join('')

使用Concat

如果你想使用它,这是函数的concat版本。

const newArr = arr.reduce((acc, x) => acc.concat(...x), [])