连接数组Javascript

时间:2018-07-12 01:45:05

标签: javascript arrays multidimensional-array

我有两个数组:

Array1 = [
  [{
    index: '1',
    value: '100'
  }, {
    index: '2',
    value: '200'
  }],
  [{
    index: '1.1',
    value: '100'
  }, {
    index: '1.2',
    value: '200'
  }]
];

Array2 = [
  [{
    index: '10',
    value: '100'
  }, {
    index: '20',
    value: '200'
  }],
  [{
    index: '10.1',
    value: '100'
  }, {
    index: '10.2',
    value: '200'
  }]
]

我如何连接两个数组,以便最终的数组为

ResultArray = [
  [{
    index: '1',
    value: '100'
  }, {
    index: '2',
    value: '200'
  }, {
    index: '10',
    value: '100'
  }, {
    index: '20',
    value: '200'
  }],
  [
    [{
      index: '1.1',
      value: '100'
    }, {
      index: '1.2',
      value: '200'
    }], {
      index: '10.1',
      value: '100'
    }, {
      index: '10.2',
      value: '200'
    }
  ]
]

预先感谢

4 个答案:

答案 0 :(得分:0)

正如评论所说,您可能需要根据索引是整数字符串还是浮点字符串来分隔它们。

这是一个如何进行分离的示例。

Array1 = [
  [{
    index: '1',
    value: '100'
  }, {
    index: '2',
    value: '200'
  }],
  [{
    index: '1.1',
    value: '100'
  }, {
    index: '1.2',
    value: '200'
  }]
];

Array2 = [
  [{
    index: '10',
    value: '100'
  }, {
    index: '20',
    value: '200'
  }],
  [{
    index: '10.1',
    value: '100'
  }, {
    index: '10.2',
    value: '200'
  }]
]

ResultArray = [[],[]];

// first combine all of the elements.
var arr = [];
[...Array1, ...Array2].forEach(function(el){
  arr.push(...el);
})

// check all elements and set to result array
arr.forEach(function(el){
  // check whether it is integer or not to set to index 0 or 1
  // if Number(el.index) is integer, mod 1 will equal to 0, else it is float.
  var val = Number(el.index);
  if(val % 1 === 0)
    ResultArray[0].push(el);
  else
    ResultArray[1].push(el);
})

console.log(ResultArray);

答案 1 :(得分:0)

这可以提高效率,但为简单起见,它分为两个步骤。第一步是将所有对象展平为一个数组。第二种是根据它们的 index 值(整数与浮点数)将它们的内容分为一个数组:

user-service.ts

答案 2 :(得分:0)

只需连接源数组,然后遍历它们。在每次迭代中,检查index是浮点数还是整数,并根据决策将结果推送到单独的数组中。

var arr1= [[{index:'1',value:'100'},{index:'2',value:'200'}],[{index:'1.1',value:'100'},{index:'1.2',value:'200'}]];
var arr2 = [[{index:'10',value:'100'},{index:'20',value:'200'}],[{index:'10.1',value:'100'},{index:'10.2',value:'200'}]];

var ints = [],
  floats = [];

function classify(items) {
  items.forEach(item => (/^\d+$/.test(item.index) ? ints : floats).push(item));
}

arr1.concat(arr2).forEach(classify);
console.log([ints, floats]);

答案 3 :(得分:-1)

仅当Array1和Array2具有相同的大小时,此代码才有效。该代码根据各自的键组合Array1和Array2中的对象。

var arr = [];
for (var i = 0; i < Array1.length; i++){
    arr.push(Array1[i].concat(Array2[i]));
}
console.log(arr);