简体   繁体   English

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

[英]Sorting an array of objects reference of other array of objects

I have two arrays of objects我有两个对象数组


   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"}]

I would like to sort the resArray based on order of reference_array, the similar things of the two arrays is key value.我想根据reference_array的顺序对resArray进行排序,两个数组的相似之处是键值。

How to sort the resArray based on order of reference_array.如何根据 reference_array 的顺序对 resArray 进行排序。

I tried in many ways but i have no luck.please help me to resolve the issue like below我尝试了很多方法,但我没有运气。请帮助我解决如下问题

Thanks in advance提前致谢

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);
});

Expected Output :预期输出:


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"
    }
]

You could take an object as reference for the sorting order and take Infinity for unknown key for sorting this items to the bottom of the array.您可以将一个对象作为排序顺序的参考,并将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; }

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM