javascript - 对其他对象数组的对象引用进行排序

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

最佳答案

您可以将一个对象作为排序顺序的引用,并将 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; }

关于javascript - 对其他对象数组的对象引用进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57803784/

相关文章:

javascript - X-Editable - 如何使用 ajax 提取表单数据

javascript - 如何设置元素的高度与其内容相同?

c++ - 限制 std::string 变量的最大长度

python - 使用冒号的 Numpy 数组切片

javascript - React-Native - Object.assign 子项更改

c++ - 对象在 assembly 级的x86中如何工作?

javascript - Bootstrap popover 不会第一次出现在使用 ajax 的悬停事件上

javascript - Rails 4 - javascript 文件未在生产中加载但在本地运行良好。 (英雄)

javascript - Javascript 中的一维数组到二维数组

javascript - 抓取谷歌新闻