Arrays Typescript-如何基于另一个数组对一个对象数组进行排序,该数组具有排序对象';s场?

Arrays Typescript-如何基于另一个数组对一个对象数组进行排序,该数组具有排序对象';s场?,arrays,typescript,sorting,Arrays,Typescript,Sorting,Typescript-如何基于另一个具有已排序对象字段的数组对一个对象数组进行排序 例如: 数组A未排序 已排序对象字段的数组B 尝试根据数组B的顺序对数组A排序 const unsortedArray = [ { repId: "4", symbol: "MSLA", orderNo: "20180518-00004" }, { repId: "2", symbol: "TSLA", orderNo: "20180518-00003" }, {

Typescript-如何基于另一个具有已排序对象字段的数组对一个对象数组进行排序

例如:

数组A未排序

已排序对象字段的数组B

尝试根据数组B的顺序对数组A排序

const unsortedArray = [
{
    repId: "4",
    symbol: "MSLA",
    orderNo: "20180518-00004"
},
{
    repId: "2",
    symbol: "TSLA",
    orderNo: "20180518-00003"
},
{
    repId: "55",
    symbol: "APPL",
    orderNo: "20180518-00001"
},
{
    repId: "22",
    symbol: "FB",
    orderNo: "20180518-0002"
}]

const sortedArrayField = [
    "20180518-00001", 
    "20180518-00002", 
    "20180518-00003", 
    "20180518-00004"
]

// This is the sorted order that I want
const sortedArray = [
{
    repId: "55",
    symbol: "APPL",
    orderNo: "20180518-00001"
},
{
    repId: "22",
    symbol: "FB",
    orderNo: "20180518-00002"
},
{
    repId: "2",
    symbol: "TSLA",
    orderNo: "20180518-00003"
},
{
    repId: "4",
    symbol: "MSLA",
    orderNo: "20180518-00004"
}]
排序字段数组可以是任何内容,而不仅仅是订单号,还可以是符号、状态等。。。有什么建议吗


查阅了一些示例并尝试了一些方法,但到目前为止,typescript还没有优雅的解决方案。无外部库plz。

您可以使用已排序数组中orderNo的索引对数组进行排序:

const unsortedArray=[
{
谴责:“4”,
符号:“MSLA”,
订单号:“20180518-00004”
},
{
谴责:“2”,
符号:“TSLA”,
订单号:“20180518-00003”
},
{
雷皮德:“55”,
符号:“应用程序”,
订单号:“20180518-00001”
},
{
谴责:“22”,
符号:“FB”,
订单号:“20180518-00002”
}]
常量字段=[
"20180518-00001", 
"20180518-00002", 
"20180518-00003", 
"20180518-00004"
];
//按SorterDarray中orderNo的索引对数组进行排序
unsortedArray.sort((x,y)=>
SorterDarrayField.indexOf(x.orderNo)-SorterDarrayField.indexOf(y.orderNo)
);

console.log(unsortedArray)您可以使用排序数组中orderNo的索引对数组进行排序:

const unsortedArray=[
{
谴责:“4”,
符号:“MSLA”,
订单号:“20180518-00004”
},
{
谴责:“2”,
符号:“TSLA”,
订单号:“20180518-00003”
},
{
雷皮德:“55”,
符号:“应用程序”,
订单号:“20180518-00001”
},
{
谴责:“22”,
符号:“FB”,
订单号:“20180518-00002”
}]
常量字段=[
"20180518-00001", 
"20180518-00002", 
"20180518-00003", 
"20180518-00004"
];
//按SorterDarray中orderNo的索引对数组进行排序
unsortedArray.sort((x,y)=>
SorterDarrayField.indexOf(x.orderNo)-SorterDarrayField.indexOf(y.orderNo)
);
console.log(unsortedArray)请尝试以下操作:

const unsortedArray=[
{
谴责:“4”,
符号:“MSLA”,
订单号:“20180518-00004”
},
{
谴责:“2”,
符号:“TSLA”,
订单号:“20180518-00003”
},
{
雷皮德:“55”,
符号:“应用程序”,
订单号:“20180518-00001”
},
{
谴责:“22”,
符号:“FB”,
订单号:“20180518-00002”
}];
常量字段=[
"20180518-00001", 
"20180518-00002", 
"20180518-00003", 
"20180518-00004"
];
unsortedArray.sort(函数(obj1、obj2){
if(sortedArrayField.indexOf(obj1.orderNo)!=-1和&sortedArrayField.indexOf(obj2.orderNo)!=-1){
返回SorterDarrayField.indexOf(obj1.orderNo)-SorterDarrayField.indexOf(obj2.orderNo);
}else if(sortedArrayField.indexOf(obj1.orderNo)!=-1&&sortedArrayField.indexOf(obj2.orderNo)=-1){
返回0;
}否则{
返回1;
}
});
console.log(unsortedArray)请尝试以下操作:

const unsortedArray=[
{
谴责:“4”,
符号:“MSLA”,
订单号:“20180518-00004”
},
{
谴责:“2”,
符号:“TSLA”,
订单号:“20180518-00003”
},
{
雷皮德:“55”,
符号:“应用程序”,
订单号:“20180518-00001”
},
{
谴责:“22”,
符号:“FB”,
订单号:“20180518-00002”
}];
常量字段=[
"20180518-00001", 
"20180518-00002", 
"20180518-00003", 
"20180518-00004"
];
unsortedArray.sort(函数(obj1、obj2){
if(sortedArrayField.indexOf(obj1.orderNo)!=-1和&sortedArrayField.indexOf(obj2.orderNo)!=-1){
返回SorterDarrayField.indexOf(obj1.orderNo)-SorterDarrayField.indexOf(obj2.orderNo);
}else if(sortedArrayField.indexOf(obj1.orderNo)!=-1&&sortedArrayField.indexOf(obj2.orderNo)=-1){
返回0;
}否则{
返回1;
}
});

console.log(unsortedArray)如果您知道需要根据它进行排序的字段,那么@yadejo solution是正确的

如果没有,请尝试以下解决方案

    const unsortedArray = [
  {
    repId: '4',
    symbol: 'MSLA',
    orderNo: '20180518-00004'
  },
  {
    repId: '2',
    symbol: 'TSLA',
    orderNo: '20180518-00003'
  },
  {
    repId: '55',
    symbol: 'APPL',
    orderNo: '20180518-00001'
  },
  {
    repId: '22',
    symbol: 'FB',
    orderNo: '20180518-00002'
  }];

const sortedArrayField = [
  '20180518-00001',
  '20180518-00002',
  '20180518-00003',
  '20180518-00004'
];

const sortedArrayOfObject = [];

for (const sortedItem of sortedArrayField) {
  sortedArrayOfObject.push(unsortedArray.find(item => {
    for (const prop in item) {
      if (item[prop] === sortedItem) {
        return true;
      }
    }
    return false;
  }));
}

console.log(sortedArrayOfObject);

如果您知道需要根据该字段进行排序的字段,那么@yadejo solution是正确的

如果没有,请尝试以下解决方案

    const unsortedArray = [
  {
    repId: '4',
    symbol: 'MSLA',
    orderNo: '20180518-00004'
  },
  {
    repId: '2',
    symbol: 'TSLA',
    orderNo: '20180518-00003'
  },
  {
    repId: '55',
    symbol: 'APPL',
    orderNo: '20180518-00001'
  },
  {
    repId: '22',
    symbol: 'FB',
    orderNo: '20180518-00002'
  }];

const sortedArrayField = [
  '20180518-00001',
  '20180518-00002',
  '20180518-00003',
  '20180518-00004'
];

const sortedArrayOfObject = [];

for (const sortedItem of sortedArrayField) {
  sortedArrayOfObject.push(unsortedArray.find(item => {
    for (const prop in item) {
      if (item[prop] === sortedItem) {
        return true;
      }
    }
    return false;
  }));
}

console.log(sortedArrayOfObject);

您可以这样做:
sortedArrayField.map(orderNo=>unsortedArray.find(item=>item.orderNo==orderNo))

如果在同一位置有多个对象,也可以使用此选项:

var sortedArray2 = [];
sortedArrayField.forEach(orderNo => {
  sortedArray2 = sortedArray2.concat(unsortedArray.filter(item => item.orderNo === orderNo));
});
const unsortedArray=[
{
谴责:“4”,
符号:“MSLA”,
订单号:“20180518-00004”
},
{
谴责:“2”,
符号:“TSLA”,
订单号:“20180518-00003”
},
{
雷皮德:“55”,
符号:“应用程序”,
订单号:“20180518-00001”
},
{
谴责:“22”,
符号:“FB”,
订单号:“20180518-00002”
},
{
谴责:“22(2)”,
符号:“FB”,
订单号:“20180518-00002”
}]
常量字段=[
"20180518-00001", 
"20180518-00002", 
"20180518-00003", 
"20180518-00004"
];
var sortedArray=sortedArrayField.map(orderNo=>unsortedArray.find(item=>item.orderNo==orderNo));
控制台日志(Darray);
var-Darray2=[];
SorterDarrayField.forEach(订单号=>{
sortedarray 2=sortedarray 2.concat(unsortedArray.filter(item=>item.orderNo==orderNo));
});

控制台日志(2)您可以这样做:
sortedArrayField.map(orderNo=>unsortedArray.find(item=>item.orderNo==orderNo))

如果在同一位置有多个对象,也可以使用此选项:

var sortedArray2 = [];
sortedArrayField.forEach(orderNo => {
  sortedArray2 = sortedArray2.concat(unsortedArray.filter(item => item.orderNo === orderNo));
});
const unsortedArray=[
{
谴责:“4”,
符号:“MSLA”,
订单号:“20180518-00004”
},
{
谴责:“2”,
符号:“TSLA”,
订单号:“20180518-00003”
},
{
雷皮德:“55”,
符号:“应用程序”,
订单号:“20180518-00001”
},
{
谴责:“22”,
符号:“FB”,
订单号:“20180518-00002”
},
{
谴责:“22(2)”,
符号:“FB”,
订单号:“20180518-00002”
}]
常量字段=[
"20180518-00001", 
"20180518-00002", 
"20180518-00003", 
"20180518-00004"
];
var sortedArray=sortedArrayField.map(orderNo=>unsortedArray.find(item=>item.orderNo==orderNo));
控制台日志(Darray);
var-Darray2=[];
分类