javascript - 将三个数组合二为一

标签 javascript arrays angularjs lodash

我正在寻找一种更有效的方法来组合这三个数组。两个数据数组和一个连接这两个数组的“交叉”数组。

3个数组

var drives = [
    {"drivesId": "rwd", "name": "RWD"},
    {"drivesId": "fwd", "name": "FWD"},
    {"drivesId": "awd", "name": "AWD"}
]


var cars = [
    {"carId": "civic", "name": "Civic"},
    {"carId": "wrx", "name": "WRX"},
    {"carId": "mustang", "name": "Mustang"},
    {"carId": "focus", "name": "Focus"},
]

var drivesXcars = [
    {"drivesXcars": "uid1", "carId": "civic", "drivesId": "fwd"},
    {"drivesXcars": "uid2", "carId": "wrx", "drivesId": "awd"},
    {"drivesXcars": "uid3", "carId": "mustang", "drivesId": "rwd"},
    {"drivesXcars": "uid4", "carId": "focus", "drivesId": "fwd"},
]

我希望将它们组合成一个数组,如下所示:

var carsComplete = [
    {"drivesId": "fwd", "driveName": "FWD", "cars": [
        {"carId": "civic", "name": "Civic"},
        {"carId": "focus", "name": "Focus"}
    ]},
    {"drivesId": "rwd", "driveName": "RWD", "cars": [
        {"carId": "mustang", "name": "Mustang"}
    ]},
    {"drivesId": "awd", "driveName": "AWD", "cars": [
        {"carId": "wrx", "name": "WRX"}
    ]},
]

是的,我可以用标准的 for 循环方式来做到这一点,但是这些数组变得越来越大,标准的“强力”方式对我来说不够好。

我希望有人会知道使用 AngularJS 和/或 lodash 执行此操作的更有效方法。

最佳答案

它可以用普通的 JavaScript 轻松实现:

const carsComplete = drives.map(x => ({
  drivesId: x.drivesId,
  driveName: x.name,
  cars: drivesXcars
    // Only the cars which belong to this person.
    .filter(n => n.drivesId === x.drivesId) 
    // Get the car by id.
    .map(n => cars.find(m => m.carId === n.carId))
}))

参见 JS Bin .

关于javascript - 将三个数组合二为一,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35801763/

相关文章:

javascript - 使用 HTML 内容预填充电子邮件

php - 如何从 PHP 中的数组填充组合框?

javascript - 将数组从 EJS 传递到 Javascript

javascript - 我如何无法将 ng-model 值和标签值放入一个对象中?

javascript - 如何使图像上的跨度元素相对于图像大小调整?

javascript - angularjs 中没有 ng-model 是否可以在 Controller 之间共享值?

javascript - 什么是 JavaScript FileReader 以及它可以在哪里使用?

javascript - 在 Javascript 中调用 Firebase 数据库 child() 返回 "undefined"

Javascript数组映射函数保留数组先前项目的记录

javascript - 如何调试失败的 Angular 选择(或任何其他类型)绑定(bind)?