gpt4 book ai didi

javascript - 按特定顺序对对象数组进行排序

转载 作者:行者123 更新时间:2023-12-03 09:47:34 25 4
gpt4 key购买 nike

我有以下数组:

        [{"cod_nivel":"INC2","cod_modelo":"D"},   
{"cod_nivel":"PRIM1","cod_modelo":"B"},
{"cod_nivel":"INC2","cod_modelo":"B"},
{"cod_nivel":"INC1","cod_modelo":"D"},
{"cod_nivel":"PRIM1","cod_modelo":"D"},
{"cod_nivel":"BAC2","cod_modelo":"B"},
{"cod_nivel":"BAC2","cod_modelo":"D"},
{"cod_nivel":"BAC2","cod_modelo":"A"}]

我需要通过按“cod_nivel”分组的“cod_modelo”升序对这个对象数组进行排序。所以结果应该是:
    [{"cod_nivel":"INC1","cod_modelo":"D"},    
{"cod_nivel":"INC2","cod_modelo":"B"},
{"cod_nivel":"INC2","cod_modelo":"D"},
{"cod_nivel":"PRIM1","cod_modelo":"B"},
{"cod_nivel":"PRIM1","cod_modelo":"D"},
{"cod_nivel":"BAC2","cod_modelo":"A"},
{"cod_nivel":"BAC2","cod_modelo":"B"},
{"cod_nivel":"BAC2","cod_modelo":"D"}]

好的,我制作了这段代码,首先通过 cod_nivel 和 cod_modelo 对数组进行排序:
var sortedArray = array.sort(function (a, b) {
return (a["cod_nivel"] > b["cod_nivel"]) ? 1 : -1;
}).sort(function (a, b) {
if (a["cod_nivel"] == b["cod_nivel"])
return (a["cod_modelo"] > b["cod_modelo"]) ? 1 : -1;
else
return 0;
});

问题是此代码也按“cod_nivel”排序,因此获得的数组将是:
    [{"cod_nivel":"BAC2","cod_modelo":"A"},    
{"cod_nivel":"BAC2","cod_modelo":"B"},
{"cod_nivel":"BAC2","cod_modelo":"D"},
{"cod_nivel":"INC1","cod_modelo":"D"},
{"cod_nivel":"INC2","cod_modelo":"B"},
{"cod_nivel":"INC2","cod_modelo":"D"},
{"cod_nivel":"PRIM1","cod_modelo":"B"},
{"cod_nivel":"PRIM1","cod_modelo":"D"}]

请注意,BAC2 cod_nivel 对象位于开头。

我需要先通过 cod_nivel 订购,但要按给定的顺序订购,即:
  • INC1
  • INC2
  • PRIM1
  • PRIM2
  • BAC1
  • BAC2

  • 我假设我需要一个具有“cod_nivel”固定顺序的数组,并在排序时使用它,但我不知道如何使用它,所以我没有包含在我的方法中。
    var order_arr = ['INC1', 'INC2', 'PRIM1', 'PRIM2', 'BAC1', 'BAC2']

    之后,按 cod_modelo 排序(按每个 cod_nivel 分组)。

    我希望我已经清楚地解释了自己,有人可以帮助我。

    最佳答案

    您可以在关联数组中分配索引,如下所示

    var cod_nivel_order = {
    'INC1': 0,
    'INC2': 1,
    'PRIM1': 2,
    'PRIM2': 3,
    'BAC1': 4,
    'BAC2': 5
    };

    然后你可以这样排序
    function compare(a, b) {
    if (a === b) {
    return 0;
    }
    return a < b ? -1 : 1;
    }

    var sortedArray = array.sort(function (a, b) {

    // First compare corresponding values of `cod_nivel` from `cod_nivel_order`
    var index_result = compare(cod_nivel_order[a.cod_nivel],
    cod_nivel_order[b.cod_nivel]);

    // If they are equal
    if (index_result === 0) {

    // Return the result of comparing `cod_modelo`s
    return compare(a.cod_modelo, b.cod_modelo);
    }

    return index_result;
    });

    现在结果将是
    [ { cod_nivel: 'INC1', cod_modelo: 'D' },
    { cod_nivel: 'INC2', cod_modelo: 'B' },
    { cod_nivel: 'INC2', cod_modelo: 'D' },
    { cod_nivel: 'PRIM1', cod_modelo: 'B' },
    { cod_nivel: 'PRIM1', cod_modelo: 'D' },
    { cod_nivel: 'BAC2', cod_modelo: 'A' },
    { cod_nivel: 'BAC2', cod_modelo: 'B' },
    { cod_nivel: 'BAC2', cod_modelo: 'D' } ]

    关于javascript - 按特定顺序对对象数组进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29601731/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com