javascript - 条件合并2个二维数组

标签 javascript arrays node.js underscore.js

我有 2 个数组,

arr1 = [
    ['itemid-1', 'itemclass', 'timestamp'],
    ['itemid-2', 'itemclass', 'timestamp'],
    ['itemid-3', 'itemclass', 'timestamp'],
    ['itemid-5', 'itemclass', 'timestamp']
];

arr2 = [
    ['itemid-1', 'data-state', 'data-col'],
    ['itemid-3', 'data-state', 'data-col'],
    ['itemid-4', 'data-state', 'data-col']
];

最终结果应该是:

arr1 = [
    ['itemid-1', 'itemclass', 'timestamp', 'data-state', 'data-col'],
    ['itemid-2', 'itemclass', 'timestamp'],
    ['itemid-3', 'itemclass', 'timestamp', 'data-state', 'data-col'],
    ['itemid-5', 'itemclass', 'timestamp']
];

我想合并从 arr2arr1 的值,其中 itemid-x 是相同的。

我可以使用循环来做到这一点,

for(i = 0; i < arr1.length; i++){
    for(j = 0; j < arr2.length; j++){
        if(arr1[i][0] == arr2[j][0]){
            arr1[i] = arr1[i].concat(arr2[j].slice(1));
        }
    }

}

但是我最近开始使用 underscorejs和 nodejs,所以我想知道是否可以使用任何现有功能来完成。

PS:我找到了this answer有趣,但它要求数组的长度相同,而且如果 itemid-x 索引在两个数组中不相同,它也不会工作。

最佳答案

我不知道它是否真的让事情看起来更好或更容易理解,但你可以做到

arr1.forEach(function(v, i){arr2.filter(function(v2){return v[0]==v2[0]}).forEach(function(v3){v3.slice(1).forEach(function(e){v.push(e)})})});

这肯定看起来更像 js。 ;)

我认为有太多不同的数据结构和用例,您无法从您的数据结构中真正推导出一个常见的用例。元素 [0] 在某种程度上是特殊的,但这反射(reflect)在您的代码中,而不是数据结构中。

对于您认为有趣的答案中考虑的内容,您可以重组数据吗? arr2 = { itemid-1: [ ... ], itemid-2: [ ... ] }。然后你可以做一个 forEach 循环,一个简单的查找和一个 concat:arr1[i].concat(arr2[v])?

关于javascript - 条件合并2个二维数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17358021/

相关文章:

javascript - onclick 使 Fabricjs 对象居中?

javascript - 部分无限滚动返回整个布局,而不是附加部分 Rails 4

Javascript 从另一个脚本结果中提取或映射特定的 id/值

javascript - 在 React Js 中处理多个上传图像 + 将其发送到服务器

javascript - 这个函数有什么作用?奇怪的语法是什么?

javascript - express.js - session 访问中间件不工作

java - Java中如何调用另一个方法中的方法(同一个类)

postgresql - 如何获取存储在 PostgreSQL 中的 bytea 的 MIME 类型

node.js - React + Webpack + Material UI 样式在生产中的突破

node.js - Google Search Console API : How do I Solve "User does not have sufficient permission for site"?(当用户有权限时)