对任意对象数组进行排序
ranking arbitrary array of objects
如果我有一个像这样的数组
var cars=
[
{ 'title':'brand', 'value':'honda'}
{ 'title':'brand', 'value':'toyota'}
{ 'title':'color', 'value':'red'}
{ 'title':'color', 'value':'white'}
{ 'title':'year', 'value':'1995'}
{ 'title':'year', 'value':'2006'}
{ 'title':'year', 'value':'2007'}
]
如何编写一个返回元素秩的函数?所以对于这个数组,对于标题为brand的元素,它应该返回0,对于标题为color的元素,它应该返回1,以此类推。它不应该缓存或使用任何映射表,但应该确定航班上的排名,因此任何时候调用
getRank(cars[6]) == 2 //true for the last element
getRank(cars[0]) == 0 //true for the first element
getRank(cars[1]) == 0 //true for the second element
getRank(cars[3]) == 1 //true for the fourth element
根据您的进一步解释更新答案
Javascriptvar cars = [
{ 'title':'brand', 'value':'honda'},
{ 'title':'brand', 'value':'toyota'},
{ 'title':'color', 'value':'red'},
{ 'title':'color', 'value':'white'},
{ 'title':'year', 'value':'1995'},
{ 'title':'year', 'value':'2006'},
{ 'title':'year', 'value':'2007'}
];
function getRank(data, number) {
var ranks = {},
rank = 0;
data.forEach(function (entry) {
if (typeof ranks[entry.title] !== "number") {
ranks[entry.title] = rank;
rank += 1;
}
});
return ranks[data[number].title];
}
console.log(getRank(cars, 6));
console.log(getRank(cars, 0));
console.log(getRank(cars, 1));
console.log(getRank(cars, 3));
在jsfiddle 输出2
0
0
1
如果它已经排序(必须是,否则我真的不明白你的问题),你可以做以下事情
var current_index = -1;
var current_title = "";
for (var i in arr) {
if (arr[i].title!=current_title) {
current_title = arr[i].title;
current_index++;
}
arr[i].rank = current_index;
}
相关文章:
- JavaScript数组排序(函数)用于对表行进行排序,而不是排序
- 在数组的 2/3 上调用自身的排序算法
- 数组值的排序以匹配另一个数组ES6
- 按不同项目对对象数组进行排序
- 根据Javascript中的字符串值对数组的数组进行排序
- 在不同的javascript数组中对json响应进行排序
- 对对象数组中的数组进行排序
- 按特定键对对象数组进行排序
- 使用jquery根据数组对表行进行排序
- 尝试对对象数组进行排序但拼接不是一个函数
- 对javascript中某些键的对象数组进行排序
- Javascript按数字顺序排序()数组
- Javascript排序索引链接数组
- 在jquery中对时间数组进行排序
- 如何在具有相同 ID 的 Javascript 中按排序函数对关联数组进行排序
- Javascript中的多维数组排序索引问题
- 如何在mongodb中根据数组内容的差异进行排序
- 在Javascript中对具有特定异常的对象数组进行排序
- 数组数据排序类似mysql查询
- 在小于O(n)时间内找到(排序)数组中的重复元素