gpt4 book ai didi

javascript - 通过根据属性分组来排序 javascript 数组

转载 作者:行者123 更新时间:2023-11-29 20:12:40 34 4
gpt4 key购买 nike

我正在使用从搜索网络服务返回的一组 json 对象来提供 jQuery.ui 自动完成功能,其中我使用 category system根据“家庭”对我的对象进行分组

该算法使用一个列表,其中的组已经很好地排序,我目前无法做到这一点,所以我想在客户端组织数据。因此,例如,如果我有以下数组:

var resultsArray = [
{"cat": "Category #1", "Id": "10"},
{"cat": "Category #2", "Id": "28"},
{"cat": "Category #1", "Id": "11"},
{"cat": "Category #2", "Id": "21"},
{"cat": "Category #1", "Id": "13"}
];

我想在 resultsArray 上调用一个方法,这样我就可以回来

resultsArray = [
{"cat": "Category #1", "Id": "10"},
{"cat": "Category #1", "Id": "11"},
{"cat": "Category #1", "Id": "13"},
{"cat": "Category #2", "Id": "28"},
{"cat": "Category #2", "Id": "21"}
];

按 cat 属性分组,同时保留现有顺序。

起初我尝试在数组上使用排序方法,通过返回数组中我试图分组的值所在的位置(假设 acs.groupBy 包含分组属性的名称:

items.sort(function(a, b) {
var aValue = a[acs.groupBy],
bValue = b[acs.groupBy];
var indexOfAValue = 0; // should be sthing like items.indexWhere(item[acs.groupBy] === aValue)
var indexOfBValue = 0; // same thing
return indexOfAValue - indexOfBValue;
});

with indexOfAValue 将是数组中找到 A 的分组属性的第一个位置,但我找不到简单地获取和缓存此值的方法(数组的 indexOf 匹配整个对象)。有什么想法吗?


编辑

看来我举错了例子:)我不想对类别进行排序。如果类别 #2 发生在类别 #1 之前,我想保留此信息

var resultsArray = [
{"cat": "Category #3", "Id": "39"},
{"cat": "Category #2", "Id": "28"},
{"cat": "Category #1", "Id": "11"},
{"cat": "Category #2", "Id": "21"},
{"cat": "Category #1", "Id": "18"}
]

会变成(请注意,即使我根据类别对项目进行分组,我也没有更改类别出现的顺序,并且我也没有根据 ID 更改组内的项目顺序)

var resultsArray = [
{"cat": "Category #3", "Id": "39"},
{"cat": "Category #2", "Id": "28"},
{"cat": "Category #2", "Id": "21"},
{"cat": "Category #1", "Id": "11"},
{"cat": "Category #1", "Id": "18"}
]

这就是我在上面的示例中尝试按 indexOf(category) 排序的原因

最佳答案

看起来你只是在寻找一个正常的稳定排序?原生 JS 排序在大多数浏览器中都是稳定的(过去 2 年左右的每个现代浏览器),所以很简单:

items.sort( function( a, b ){
return a.Id - b.Id;
} );

通常会工作,但它在所有 浏览器中不稳定,因此要做到这一点,请执行以下操作:

for( var i=0... ){
items[i].index = i;
}
items.sort( function( a, b ){
return ( a.Id != b.Id ) ? ( a.Id - b.Id ) : ( a.index - b.index );
}

按 Id 然后按原始顺序排序。

关于javascript - 通过根据属性分组来排序 javascript 数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8646621/

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