Javascript 如何基于另一个对象数组对一个对象数组进行排序
我有一个动态调整大小的数组,它根据最后选择的数组位置0更改其顺序。问题是我想保持数组的原始顺序 为了做到这一点,我创建了一个附加变量,该变量被设置为数组的原始排序。尽管在选择项后数组的某些值可能会更改,但name属性永远不会更改。我想利用这个事实将新数组排序到原始位置Javascript 如何基于另一个对象数组对一个对象数组进行排序,javascript,arrays,sorting,Javascript,Arrays,Sorting,我有一个动态调整大小的数组,它根据最后选择的数组位置0更改其顺序。问题是我想保持数组的原始顺序 为了做到这一点,我创建了一个附加变量,该变量被设置为数组的原始排序。尽管在选择项后数组的某些值可能会更改,但name属性永远不会更改。我想利用这个事实将新数组排序到原始位置 let keepRateOrder = rates.sort((a, b) => { return prevRates.indexOf(a.name) - prevRates.indexOf(b.name
let keepRateOrder = rates.sort((a, b) => {
return prevRates.indexOf(a.name) - prevRates.indexOf(b.name);
});
const rates = [
{name:'UPS', isChoosen:true, cost:63 ...},
{name:'Mail', isChoosen:false, cost:23 ...},
{name:'FedEx', isChoosen:false, cost:33 ...}
]
const prevRates = [
{name:'Mail', isChoosen:false, cost:23 ...},
{name:'UPS', isChoosen:true, cost:63 ...},
{name:'FedEx', isChoosen:false, cost:33 ...}
]
这可以通过以下方法解决。在以下示例中,排序将根据prevRates
数组将Mail
放在第一位:
const rates=[
{name:'UPS',isChoosen:true,cost:63},
{name:'Mail',isChoosen:false,cost:23},
{name:'FedEx',isChoosen:false,cost:33}
];
常数预测率=[
{name:'Mail'},
{name:'UPS'},
{name:'联邦快递'},
];
让keepRateOrder=rates.sort((a,b)=>{
返回prevRates.findIndex(p=>p.name==a.name)-prevRates.findIndex(p=>p.name==b.name);
});
控制台日志(keepRateOrder)
首先使用.map
将先前的
转换为一个仅包含名称
属性的数组,然后可以根据该名称数组使用.sort
:
const prevRates=[
{name:'Mail',isChoosen:false,cost:23},
{name:'UPS',isChoosen:true,cost:63},
{name:'FedEx',isChoosen:false,cost:33}
];
常数率=[
{name:'UPS',isChoosen:true,cost:63},
{name:'Mail',isChoosen:false,cost:23},
{name:'FedEx',isChoosen:false,cost:33}
];
const prevRatesNames=prevRates.map(({name})=>name);
比率.排序((a,b)=>(
prevRatesNames.indexOf(a.name)-prevRatesNames.indexOf(b.name)
));
控制台日志(费率)
为每个项目添加一个新属性以跟踪原始索引,originalIndex
。当您想要恢复原始订单时,使用该选项进行排序,以避免额外的副本。假设这就是你想做的 @p.s.w.g keepRatesOrder不正确,我的问题是将费率排序到与prevRates相同的顺序。prevRates只是更改前rates数组的一个副本。我只想把它恢复到原来的顺序。@user7659932哪一个是唯一的键?名称
?@NikKyriakides是的,其余值受change@CertainPerformance有一个例子说明了prevRates可能是什么样子,两者之间的唯一区别是顺序,而未列出的其他一些属性可能不同。为什么不使用一个指向所选速率的变量点呢?每次有更新时,都会为每个变量设置isChoosen,相反,它可以只更新一个变量,或者如果未选择任何内容,则将其设置为null。