Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/398.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
如何使用es6或lodash在javascript中按索引按两个数组分组?_Javascript_Ecmascript 6_Lodash - Fatal编程技术网

如何使用es6或lodash在javascript中按索引按两个数组分组?

如何使用es6或lodash在javascript中按索引按两个数组分组?,javascript,ecmascript-6,lodash,Javascript,Ecmascript 6,Lodash,我们有两个相同的数组按主题按索引分组。 两个具有相同长度和不同值的数组,如blow。 如何按两个数组进行分组,并按ES6减少或减少索引 array1 = [1,2,3,4] OR [{a:1},{b:2},{c:3},{d:4}] array2 = [5,6,7,8] OR [{e:5},{f:6},{g:7},{h:8}] finalArray = [[1,5],[2,6],[3,7],[4,8]] 我正在尝试不同的方法,如es6中的group by with reduce或lodash

我们有两个相同的数组按主题按索引分组。 两个具有相同长度和不同值的数组,如blow。 如何按两个数组进行分组,并按ES6减少或减少索引

array1 = [1,2,3,4] OR [{a:1},{b:2},{c:3},{d:4}]
array2 = [5,6,7,8] OR [{e:5},{f:6},{g:7},{h:8}]

finalArray = [[1,5],[2,6],[3,7],[4,8]]
我正在尝试不同的方法,如es6中的group by with reduce或lodash concat,但我无法找到解决问题的最佳方法。

尝试以下方法:

让数组1=[1,2,3,4];
设array2=[5,6,7,8];
让res=array1.map((值,索引)=>{
返回[值,数组2[索引]]
})
控制台日志(res)使用
lodash
es功能

结果

[ [ 1, 5 ], [ 2, 6 ], [ 3, 7 ], [ 4, 8 ] ]
如果您正在使用对象数组。使用
Object.values
只获取值,并获取第0个元素

const array3 = [{a:1},{b:2},{c:3},{d:4}];
const array4 = [{e:5},{f:6},{g:7},{h:8}];

function firstval(ob){
  return Object.values(ob)[0]
}

console.log(_.zip(array3.map(firstval), array4.map(firstval)))
您也可以编写自己的
zip
。这是一个有限的版本。只处理2个元素,不接受或返回生成器等

它可以很容易地扩展为使用扩展运算符,因此可以使用任意数量的参数。不过,你似乎不需要那种程度的灵活性

function zip(a, b) {
  const num = Math.min(a.length, b.length);
  const result = [];
  for(i = 0; i < num; i++) result.push([a[i], b[i]]);
  return result;
}
函数zip(a、b){
const num=数学最小值(a.长度,b.长度);
常量结果=[];
对于(i=0;i
以下代码在这些假设下工作:

  • 所有输入数组都具有相同的长度
  • 若数组元素是object,则它只有一个属性

  • 您需要的通常称为
    zip
    ,因此如果lodash具有zip函数,请使用该函数。
    function zip(a, b) {
      const num = Math.min(a.length, b.length);
      const result = [];
      for(i = 0; i < num; i++) result.push([a[i], b[i]]);
      return result;
    }
    
    function getValue(element) {
      if (typeof element === 'object') {
        return Object.values(element).pop()
      } else {
        return element
      }
    }
    
    function zipArrays(arr1, arr2) {
      return arr1.reduce((acc, elm1, index) => {
        const elm2 = arr2[index]
        const elm = [getValue(elm1), getValue(elm2)]
        acc.push(elm)
        return acc
      }, [])
    }
    
    // usage:
    const array1 = [1,2,3,4] // OR [{a:1},{b:2},{c:3},{d:4}]
    const array2 = [5,6,7,8] // OR [{e:5},{f:6},{g:7},{h:8}]
    const finalArray = zipArrays(array1, array2)