我有两个二维数组。

var arr1=[[1,20],[2,30]];
var arr2=[[2,40],[3,50]];

这是预期的输出:
[[1,20,null],[2,30,40],[3,null,50]]

这就像两个数据帧的完全连接。逻辑类似于此伪代码:
df1.join(df2, df1[col_1] == df2[col_1], 'full')

但是这种情况适用于二维数组。 Lodash可以这样做吗?如果没有,如何在普通javascript中做到这一点?

最佳答案

好吧,lodash无法做到这一点,但是我们可以:

function flatten2d(arr1, arr2) {
  const o1 = _.fromPairs(arr1);
  const o2 = _.fromPairs(arr2);
  const result = [];

  _.forEach(o1, (v, k) => {
    const v2 = o2[k] || null;
    result.push([k|0, v, v2]);
    delete o2[k];
  });

  // at this point, only items non-existing
  // in o1 are left in o2
  _.forEach(o2, (v, k) => {
    result.push([k|0, null, v]);
  });

  return result;
}

测试:
flatten2d([[1,20],[2,30]], [[2,40],[3,50]])

结果:
[[1,20,null], [2,30,40], [3,null,50]]

09-30 19:00
查看更多