Javascript 如何基于另一个对象对对象数组进行排序?

Javascript 如何基于另一个对象对对象数组进行排序?,javascript,arrays,sorting,object,Javascript,Arrays,Sorting,Object,我有以下阵列: 阵列1: const arr1 = [ {_id: "13", qtde: 1, color: "red", size: "100x100"}, {_id: "16", qtde: 5, color: "green", size: "200x200"}, {_id: "1", qtde: 3, color: "yello

我有以下阵列:

阵列1:

const arr1 = [
  {_id: "13", qtde: 1, color: "red", size: "100x100"},
  {_id: "16", qtde: 5, color: "green", size: "200x200"},
  {_id: "1", qtde: 3, color: "yellow", size: "300x300"},
  {_id: "23", qtde: 2, color: "purple", size: "500x500"},
  {_id: "3", qtde: 0, color: "orange", size: "200x200"}
]
阵列2:

const arr2 = [
  {_id: "23", name: "Produto-23", price: "48.99"},
  {_id: "13", name: "Produto-13", price: "58.99"},
  {_id: "3", name: "Produto-3", price: "58.99"},
  {_id: "1", name: "Produto-1", price: "58.99"},
  {_id: "16", name: "Produto-16", price: "58.99"}
]
预期产出:

const arr2 = [
  {_id: "13", name: "Produto-13", price: "58.99"},
  {_id: "16", name: "Produto-16", price: "58.99"},
  {_id: "1", name: "Produto-1", price: "58.99"},
  {_id: "23", name: "Produto-23", price: "48.99"},
  {_id: "3", name: "Produto-3", price: "58.99"}
]
可以看出,它们是不同的,但它们具有相同的属性
\u id
,但顺序不同。我要做的是根据第二个数组的属性
\u id
重新组织它,使其具有与第一个数组相同的顺序

我只是想说清楚,我不想合并数组,也不想改变第二个数组的顺序以外的任何东西

我曾考虑过使用
Array.sort
,但由于我没有引用属性,所以不知道如何在这里应用它。基本思想是使用第一个数组的索引作为参考,因为它不会改变,但我也不知道如何改变

我如何才能做到这一点?

您可以在中使用,如下所示:

const arr1=[
{id:“13”,qtde:1,颜色:“红色”,尺寸:“100x100”},
{id:“16”,qtde:5,颜色:“绿色”,尺寸:“200x200”},
{id:“1”,qtde:3,颜色:“黄色”,尺寸:“300x300”},
{id:“23”,qtde:2,颜色:“紫色”,尺寸:“500x500”},
{id:“3”,qtde:0,颜色:“橙色”,大小:“200x200”}
]
常数arr2=[
{u id:“23”,名称:“Produto-23”,价格:“48.99”},
{编号:“13”,名称:“Produto-13”,价格:“58.99”},
{u id:“3”,名称:“Produto-3”,价格:“58.99”},
{u id:“1”,名称:“Produto-1”,价格:“58.99”},
{u id:“16”,名称:“Produto-16”,价格:“58.99”}
]
常量arr2Sorted=arr2.sort((a,b)=>{
const indexOfA=arr1.findIndex(e=>e.\u id==a.\u id);
const indexOfB=arr1.findIndex(e=>e.\u id==b.\u id);
返回indexOfA-indexOfB;
});
console.log(arr2Sorted)您可以在中使用,如下所示:

const arr1=[
{id:“13”,qtde:1,颜色:“红色”,尺寸:“100x100”},
{id:“16”,qtde:5,颜色:“绿色”,尺寸:“200x200”},
{id:“1”,qtde:3,颜色:“黄色”,尺寸:“300x300”},
{id:“23”,qtde:2,颜色:“紫色”,尺寸:“500x500”},
{id:“3”,qtde:0,颜色:“橙色”,大小:“200x200”}
]
常数arr2=[
{u id:“23”,名称:“Produto-23”,价格:“48.99”},
{编号:“13”,名称:“Produto-13”,价格:“58.99”},
{u id:“3”,名称:“Produto-3”,价格:“58.99”},
{u id:“1”,名称:“Produto-1”,价格:“58.99”},
{u id:“16”,名称:“Produto-16”,价格:“58.99”}
]
常量arr2Sorted=arr2.sort((a,b)=>{
const indexOfA=arr1.findIndex(e=>e.\u id==a.\u id);
const indexOfB=arr1.findIndex(e=>e.\u id==b.\u id);
返回indexOfA-indexOfB;
});

console.log(arr2Sorted)您需要从第一个数组创建查找映射,然后使用查找映射对另一个数组进行排序

const createLookup=(arr,key)=>
arr.reduce((acc、curr、index)=>
({…acc,[curr[key]]:index}),{});
const sortWithLookup=(arr,key,lookup)=>
arr.sort((a,b)=>lookup[a[key]]-lookup[b[key]]);
常数arr1=[
{id:“13”,qtde:1,颜色:“红色”,尺寸:“100x100”},
{id:“16”,qtde:5,颜色:“绿色”,尺寸:“200x200”},
{id:“1”,qtde:3,颜色:“黄色”,尺寸:“300x300”},
{id:“23”,qtde:2,颜色:“紫色”,尺寸:“500x500”},
{id:“3”,qtde:0,颜色:“橙色”,大小:“200x200”}
];
常数arr2=[
{u id:“23”,名称:“Produto-23”,价格:“48.99”},
{编号:“13”,名称:“Produto-13”,价格:“58.99”},
{u id:“3”,名称:“Produto-3”,价格:“58.99”},
{u id:“1”,名称:“Produto-1”,价格:“58.99”},
{u id:“16”,名称:“Produto-16”,价格:“58.99”}
];
const lookup=createLookup(arr1,'u id');
const sorted=sortWithLookup(arr2,'.'u id',查找);
sorted.forEach(item=>console.log(JSON.stringify(item))

.as console wrapper{top:0;max height:100%!important;}
您需要从第一个数组创建一个查找映射,然后使用查找映射对另一个数组进行排序

const createLookup=(arr,key)=>
arr.reduce((acc、curr、index)=>
({…acc,[curr[key]]:index}),{});
const sortWithLookup=(arr,key,lookup)=>
arr.sort((a,b)=>lookup[a[key]]-lookup[b[key]]);
常数arr1=[
{id:“13”,qtde:1,颜色:“红色”,尺寸:“100x100”},
{id:“16”,qtde:5,颜色:“绿色”,尺寸:“200x200”},
{id:“1”,qtde:3,颜色:“黄色”,尺寸:“300x300”},
{id:“23”,qtde:2,颜色:“紫色”,尺寸:“500x500”},
{id:“3”,qtde:0,颜色:“橙色”,大小:“200x200”}
];
常数arr2=[
{u id:“23”,名称:“Produto-23”,价格:“48.99”},
{编号:“13”,名称:“Produto-13”,价格:“58.99”},
{u id:“3”,名称:“Produto-3”,价格:“58.99”},
{u id:“1”,名称:“Produto-1”,价格:“58.99”},
{u id:“16”,名称:“Produto-16”,价格:“58.99”}
];
const lookup=createLookup(arr1,'u id');
const sorted=sortWithLookup(arr2,'.'u id',查找);
sorted.forEach(item=>console.log(JSON.stringify(item))

。作为控制台包装{top:0;最大高度:100%!important;}
太完美了。非常感谢,太好了。非常感谢你。