javascript - 基于属性的 JSON 数组合并

标签 javascript arrays object javascript-objects array-merge

我需要将两个单独的 JSON 数组合并为一个......

我尝试过执行 object.assign 但这只是覆盖,我只需要它与 dayOfWeek 对象匹配。任何关于如何在没有 jQuery 的情况下实现这一点的指导将是首选。

结果不一定需要具有所有相同的参数,但如果可以,那么这将是一个加号/奖金。

var daysOfWeek = [
    {
        "dayOfWeek": 0,
        "name": "Sunday"
    },
    {
        "dayOfWeek": 1,
        "name": "Monday"
    },
    {
        "dayOfWeek": 2,
        "name": "Tuesday"
    },
    {
        "dayOfWeek": 3,
        "name": "Wednesday"
    },
    {
        "dayOfWeek": 4,
        "name": "Thursday"
    },
    {
        "dayOfWeek": 5,
        "name": "Friday"
    },
    {
        "dayOfWeek": 6,
        "name": "Saturday"
    }
]
var openingHours = [
    {
        "branchId": "a16ab1f8-0cfd-42eb-bc3e-25a8697003e4",
        "dayOfWeek": 6,
        "hours": {
            "startTime": "08:00",
            "endTime": "20:00"
        },
        "updatedAt": "Tue Jan 29 2019 10:41:33 GMT+0800 (Singapore Standard Time)",
        "createdAt": "Sun Aug 19 2018 04:32:45 GMT+0800 (Singapore Standard Time)"
    },
    {
        "branchId": "62111250-b1db-42a2-9686-daecc0442628",
        "dayOfWeek": 1,
        "hours": {
            "startTime": "08:00",
            "endTime": "20:00"
        },
        "updatedAt": "Sat Nov 24 2018 09:46:42 GMT+0800 (Singapore Standard Time)",
        "createdAt": "Mon Jul 16 2018 17:39:56 GMT+0800 (Singapore Standard Time)"
    },
    {
        "branchId": "f71dd838-1a09-4d78-bbf5-a3845c59e8cf",
        "dayOfWeek": 3,
        "hours": {
            "startTime": "08:00",
            "endTime": "20:00"
        },
        "updatedAt": "Wed Oct 31 2018 13:29:56 GMT+0800 (Singapore Standard Time)",
        "createdAt": "Wed Jun 06 2018 14:09:14 GMT+0800 (Singapore Standard Time)"
    }
]

需要合并到

var daysOfWeek = [
    {
        "dayOfWeek": 0,
        "name": "Sunday"
    },
    {
        "branchId": "a16ab1f8-0cfd-42eb-bc3e-25a8697003e4",
        "dayOfWeek": 1,
        "name": "Monday",
        "hours": {
            "startTime": "08:00",
            "endTime": "20:00"
        },
        "updatedAt": "Tue Jan 29 2019 10:41:33 GMT+0800 (Singapore Standard Time)",
        "createdAt": "Sun Aug 19 2018 04:32:45 GMT+0800 (Singapore Standard Time)"
    },
    {
        "dayOfWeek": 2,
        "name": "Tuesday"
    },
    {
        "branchId": "a16ab1f8-0cfd-42eb-bc3e-25a8697003e4",
        "dayOfWeek": 3,
        "name": "Wednesday",
        "hours": {
            "startTime": "08:00",
            "endTime": "20:00"
        },
        "updatedAt": "Tue Jan 29 2019 10:41:33 GMT+0800 (Singapore Standard Time)",
        "createdAt": "Sun Aug 19 2018 04:32:45 GMT+0800 (Singapore Standard Time)"
    },
    {
        "dayOfWeek": 4,
        "name": "Thursday"
    },
    {
        "dayOfWeek": 5,
        "name": "Friday"
    },
    {
        "branchId": "a16ab1f8-0cfd-42eb-bc3e-25a8697003e4",
        "dayOfWeek": 6,
        "name": "Saturday",
        "hours": {
            "startTime": "08:00",
            "endTime": "20:00"
        },
        "updatedAt": "Tue Jan 29 2019 10:41:33 GMT+0800 (Singapore Standard Time)",
        "createdAt": "Sun Aug 19 2018 04:32:45 GMT+0800 (Singapore Standard Time)"
    }
]

最佳答案

  • 使用 .forEach() 迭代 daysOfWeek 数组。
  • 使用Object.assign()将一个数组的对象与具有某些共同属性值的第二个数组的对象合并。
  • 使用.find()搜索openingHours中需要与daysOfWeek数组中特定对象合并的对象。<

var daysOfWeek = [
    {"dayOfWeek": 0, "name": "Sunday"},
    {"dayOfWeek": 1, "name": "Monday"},
    {"dayOfWeek": 2, "name": "Tuesday"},
    {"dayOfWeek": 3, "name": "Wednesday"},
    {"dayOfWeek": 4, "name": "Thursday"},
    {"dayOfWeek": 5, "name": "Friday"},
    {"dayOfWeek": 6, "name": "Saturday"}
]
var openingHours = [
    {"branchId": "a16ab1f8-0cfd-42eb-bc3e-25a8697003e4", "dayOfWeek": 6, "hours": {"startTime": "08:00", "endTime": "20:00"}, "updatedAt": "Tue Jan 29 2019 10:41:33 GMT+0800 (Singapore Standard Time)", "createdAt": "Sun Aug 19 2018 04:32:45 GMT+0800 (Singapore Standard Time)"},
    {"branchId": "62111250-b1db-42a2-9686-daecc0442628", "dayOfWeek": 1, "hours": {"startTime": "08:00", "endTime": "20:00"}, "updatedAt": "Sat Nov 24 2018 09:46:42 GMT+0800 (Singapore Standard Time)", "createdAt": "Mon Jul 16 2018 17:39:56 GMT+0800 (Singapore Standard Time)"},
    {"branchId": "f71dd838-1a09-4d78-bbf5-a3845c59e8cf", "dayOfWeek": 3, "hours": {"startTime": "08:00", "endTime": "20:00"}, "updatedAt": "Wed Oct 31 2018 13:29:56 GMT+0800 (Singapore Standard Time)", "createdAt": "Wed Jun 06 2018 14:09:14 GMT+0800 (Singapore Standard Time)"}
];

daysOfWeek.forEach(
  o1 => Object.assign(
    o1, openingHours.find(o2 => o2.dayOfWeek === o1.dayOfWeek)
  )
);

console.log(daysOfWeek);
.as-console-wrapper { max-height: 100% !important; top: 0; }

关于javascript - 基于属性的 JSON 数组合并,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54454362/

相关文章:

r - 如何在 R 中创建对象名称

javascript - 在 JavaScript 中将字符串转换为 JSON

java - 如何访问列表

javascript - mouseenter 和 mouseleave 函数的一些问题

javascript - Tally Javascript 对象属性值

javascript - 从 JSP 列表填充 JavaScript 数组

javascript - 如何从 Angular 本地存储获取对象值?

javascript - 如何在 JavaScript 中获取 "extended"原型(prototype)属性或函数? jQuery 插件中的常见做法

javascript - 如何从传递给 View 的模型访问 javascript 文件中的 json 对象

javascript - Extjs 更改显示字段的字体大小