Javascript JS中两个值的对象数组顺序

Javascript JS中两个值的对象数组顺序,javascript,jquery,arrays,Javascript,Jquery,Arrays,我有以下对象数组 var parameter = "B001"; var my_array = [ { "Shippment_out" : "2020-05-10", "Batch" : "B001", "Truck_No" : "ZB001" }, {

我有以下对象数组

var parameter = "B001";
var my_array = [
                 {
                  "Shippment_out" : "2020-05-10",
                  "Batch" : "B001",
                  "Truck_No" : "ZB001"
                 },
                 {
                  "Shippment_out" : "2020-05-10",
                  "Batch" : "B002",
                  "Truck_No" : "ZB001"
                 },
                 {
                  "Shippment_out" : "2020-05-11",
                  "Batch" : "B001",
                  "Truck_No" : "ZB002"
                 },
                 {
                  "Shippment_out" : "2020-05-11",
                  "Batch" : "B002",
                  "Truck_No" : "ZB002"
                 },
               ]
我计划按参数对其进行排序,如果我将批次号传递为B001,则数组应先按B001排序,然后按B002排序,并先按较早的日期排序。在本例中为“2020-05-10”

同样,如果我通过“B002”,然后通过“B002”,然后通过“B001”。再早一点吧


我尝试了
my_array.sort(函数(a,b){})
,但无法实现逻辑

您可以这样设计排序功能:

items.sort(function(a, b) {
     return a.Batch - b.Batch  ||  a.Shippment_out - b.Shippment_out;
});

逻辑如下:如果a.Batch-b.Batch表达式的计算结果为0(因此这些属性相等),它将继续计算| |表达式-并返回a.shipment_out-b.shipment_out的结果。

您需要加入重要字段以对其进行排序。在排序函数中进行比较之前,只需将批处理字符串与日期字符串连接起来,如
B00120200511

编辑:若要解决排序批处理问题,请将它们与“0”字符串连接起来

使用数组和一个函数进行编码,以使用可选的批优先级对其进行排序
var my\u数组=[
{
“出货”:“2020-05-10”,
“批次”:“B001”,
“卡车编号”:“ZB001”
},
{
“出货”:“2020-05-10”,
“批次”:“B002”,
“卡车编号”:“ZB001”
},
{
“出货”:“2020-05-11”,
“批次”:“B001”,
“卡车编号”:“ZB002”
},
{
“出货”:“2020-05-11”,
“批次”:“B002”,
“卡车编号”:“ZB002”
},
];
/**
*函数用于使用.Batch和.shipppment\u out字段对任何数组进行排序,并可选地对批选项进行优先级排序
*@param{Array}arr一个包含arr.Batch和arr.shipppment_out字段的数组
*@param{String}priority可选字段,如果要在排序中对批次进行优先级排序,请使用该字段
*/
const sortMyArray=(arr,priority='')=>arr.sort((a,b)=>{
//第一:带有装运日期的concat字符串批
常量a\u id=(a.Batch==优先级?'0':a.Batch)+a.shipppment\u out;
const b_id=(b.Batch==优先级?'0':b.Batch)+b.shipppment_out;
//第二:将新Id与要排序的重要数据进行比较
返回a\u id>=b\u id?1:-1;
});
//要使用,只需致电sortMyArray。您可以使用批优先级调用
const result1=sortMyArray(我的数组'B002');
console.log(result1);
//或者没有批量优先权
const result2=sortMyArray(我的数组);
console.log(result2);

排序
方法中,检查a.批次和b.批次值。
如果两个值与所需批次相同,则根据装运情况对其进行排序。
如果其中一个值与批处理相同,则相应地返回

var my\u数组=[
{
发货日期:“2020-05-10”,
批次:“B001”,
卡车编号:“ZB001”
},
{
发货日期:“2020-05-10”,
批次:“B002”,
卡车编号:“ZB001”
},
{
发货日期:“2020-05-11”,
批次:“B001”,
卡车编号:“ZB002”
},
{
发货日期:“2020-05-11”,
批次:“B002”,
卡车编号:“ZB002”
}
];
const sortArray=(arr,batch)=>{
返回arr.sort((a,b)=>{
如果(a.批次===批次和b.批次===批次){
返回新日期(a.发货)-新日期(b.发货);
}else if(a.Batch==Batch){
返回-1;
}else if(b.Batch==批次){
返回1;
}否则{
返回0;
}
});
};
log('B001',sortArray(my_数组,“B001”);

log('B002',sortArray(my_数组,“B002”)
这种方法返回数组的方式与未考虑的参数相同,我以前尝试过这种方法。事实上,这是我以前做的。仍然无法排序parameter@Eliteuser我用“带参数排序”功能改进了我的求解,请看:)