gpt4 book ai didi

javascript - 根据另一个属性的升序对已排序的对象数组进行排序

转载 作者:搜寻专家 更新时间:2023-11-01 04:30:59 24 4
gpt4 key购买 nike

我有一组具有属性 TechTypeProductName 的对象。给定的数组已经按 TechType 排序(不一定按字母顺序);现在在这个排序数组中,它必须根据 ProductName 升序进一步排序。

var products= [
{
"TechType": "ADSL",
"ProductName": " Zen ADSL Services",
}, {
"TechType": "ADSL",
"ProductName": "ADSL Services",
}, {
"TechType": "T1",
"ProductName": "T1-Voice",
},{
"TechType": "T1",
"ProductName": " Aviate T1-Voice",


}
];

排序后的数组应该是

  var products= [
{
"TechType": "ADSL",
"ProductName": " ADSL Services",
}, {
"TechType": "ADSL",
"ProductName": "Zen ADSL Services",
}, {
"TechType": "T1",
"ProductName": " Aviate T1-Voice",
},{
"TechType": "T1",
"ProductName": " T1-Voice",


}
];

最佳答案

这个跟稳定排序有点关系。确保稳定排序的典型方法是添加辅助数据,以防万一发现项目相同时应按这些数据进行排序。

我在这里使用两个映射操作来执行此操作,类似于您将用于 Schwartzian 变换的操作;仅当技术类型在两个项目之间不匹配时才使用辅助数据。

为了演示正确的行为,我移动了项目,以便按照与问题相反的顺序排列技术类型。

var products = [{
"TechType": "T1",
"ProductName": "T1-Voice",
},{
"TechType": "T1",
"ProductName": "Aviate T1-Voice",
}, {
"TechType": "ADSL",
"ProductName": "Zen ADSL Services",
}, {
"TechType": "ADSL",
"ProductName": "ADSL Services",
}];

function sortByStableProperty(array, prop, fn)
{
// decorate
var temp = array.map(function(item, index) {
return [item, index];
});

temp.sort(function(a, b) {
// sort by auxiliary data or callback function
return a[0][prop] == b[0][prop] ? fn(a[0], b[0]) : a[1] - b[1];
});

// undecorate
return temp.map(function(item) {
return item[0];
});
}

// actual sort
products = sortByStableProperty(products, 'TechType', function(a, b) {
return a.ProductName.localeCompare(b.ProductName);
});

console.log(JSON.stringify(products));

关于javascript - 根据另一个属性的升序对已排序的对象数组进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30707012/

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