排序对象数组引用其他对象数组

时间:2019-09-05 10:47:29

标签: javascript arrays object

我有两个对象数组


   const reference_array= [{"key":"oAuthAccessToken","label":"Access Token","value":""},{"key":"clientId","label":"Client ID","value":""},{"label":"Verification Token","key":"verificationToken","value":""},{"label":"User ID","key":"userId","value":""},{"key":"signingSecret","label":"Signing Secret","value":""},{"label":"App ID","key":"appId","value":""},{"label":"Team ID","key":"teamId","value":""},{"label":"Name","key":"name","value":""},{"label":"Client Secret","key":"clientSecret","value":""},{"label":"ID","key":"id","value":""},{"label":"Channel ID","key":"channelId","value":""},{"key":"","value":""}]

   const resArray = [{"key":"3111","value":"12111"},{"key":"656556","value":"55666664"},{"key":"oAuthAccessToken","value":"123"},{"key":"clientId","value":"5"},{"key":"webhook_URL","value":"https://api.slack.com/1.1/account_activity/all/dev/webhooks.json?ref=7364616106833455"},{"key":"verificationToken","value":"55525"},{"key":"userId","value":"254"},{"key":"createdDate","value":"2019-09-05T07:47:24Z"},{"key":"createdBy","value":"John"},{"key":"webhook_ID","value":"7364616106833455"},{"key":"signingSecret","value":"12476233"},{"key":"appId","value":"9886"},{"key":"teamId","value":"8955653563"},{"key":"name","value":"56565"},{"key":"clientSecret","value":"656665656"},{"key":"id","value":"5656565"},{"key":"channelId","value":"55655565"}]

我想根据reference_array的顺序对resArray进行排序,这两个数组的相似之处在于键值。

如何根据reference_array的顺序对resArray进行排序。

我尝试了很多方法,但是没有运气。请帮助我解决以下问题

预先感谢

resArray.sort(function(a, b) {
        return reference_array.map(function(x) {return x.key; }).indexOf(b) - reference_array.map(function(x) {return x.key; }).indexOf(a);
});

预期输出:


const resArray = [{
        "key": "oAuthAccessToken",
        "value": "123"
    }, {
        "key": "clientId",
        "value": "5"
    }, {
        "key": "verificationToken",
        "value": "55525"
    }, {
        "key": "userId",
        "value": "254"
    }, {
        "key": "signingSecret",
        "value": "12476233"
    }, {
        "key": "appId",
        "value": "9886"
    }, {
        "key": "teamId",
        "value": "8955653563"
    }, {
        "key": "name",
        "value": "56565"
    }, {
        "key": "clientSecret",
        "value": "656665656"
    }, {
        "key": "id",
        "value": "5656565"
    }, {
        "key": "channelId",
        "value": "55655565"
    }, {
        "key": "3111",
        "value": "12111"
    }, {
        "key": "656556",
        "value": "55666664"
    }, {
        "key": "webhook_URL",
        "value": "https://api.slack.com/1.1/account_activity/all/dev/webhooks.json?ref=7364616106833455"
    }, {
        "key": "createdDate",
        "value": "2019-09-05T07:47:24Z"
    }, {
        "key": "createdBy",
        "value": "John"
    },
    {
        "key": "webhook_ID",
        "value": "7364616106833455"
    }
]

1 个答案:

答案 0 :(得分:1)

您可以将一个对象作为排序顺序的参考,并将Infinity用作未知键,以便将该项目排序到数组的底部。

var reference = [{ key: "oAuthAccessToken", label: "Access Token", value: "" }, { key: "clientId", label: "Client ID", value: "" }, { label: "Verification Token", key: "verificationToken", value: "" }, { label: "User ID", key: "userId", value: "" }, { key: "signingSecret", label: "Signing Secret", value: "" }, { label: "App ID", key: "appId", value: "" }, { label: "Team ID", key: "teamId", value: "" }, { label: "Name", key: "name", value: "" }, { label: "Client Secret", key: "clientSecret", value: "" }, { label: "ID", key: "id", value: "" }, { label: "Channel ID", key: "channelId", value: "" }, { key: "", value: "" }],
    array = [{ key: "3111", value: "12111" }, { key: "656556", value: "55666664" }, { key: "oAuthAccessToken", value: "123" }, { key: "clientId", value: "5" }, { key: "webhook_URL", value: "https://api.slack.com/1.1/account_activity/all/dev/webhooks.json?ref=7364616106833455" }, { key: "verificationToken", value: "55525" }, { key: "userId", value: "254" }, { key: "createdDate", value: "2019-09-05T07:47:24Z" }, { key: "createdBy", value: "John" }, { key: "webhook_ID", value: "7364616106833455" }, { key: "signingSecret", value: "12476233" }, { key: "appId", value: "9886" }, { key: "teamId", value: "8955653563" }, { key: "name", value: "56565" }, { key: "clientSecret", value: "656665656" }, { key: "id", value: "5656565" }, { key: "channelId", value: "55655565" }],
    order = reference.reduce((o, { key }, i) => (o[key] = i + 1, o), {});

array.sort((a, b) => (order[a.key] || Infinity) - (order[b.key] || Infinity));

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