根据值重新排列JSON的一部分
Rearrange part of JSON based on a value
我有以下JSON,我想根据'排名'重新安排,如果类型是'水果'或'肉'。并保持JSON的其余部分按其出现的顺序。"水果"answers"肉类"类型将具有等级,但"蔬菜"answers"日记"类型的等级不是强制性的,在某些情况下可能没有。
原始值:
var results = {"docs":[
{"type":"fruit","name":"apple","rank": 10},
{"type":"vegetable","name":"carrot","rank": 0},
{"type":"fruit","name":"grape","rank": 9},
{"type":"meat","name":"beef","rank": 9},
{"type":"meat","name":"fish","rank": 10.1},
{"type":"vegetable","name":"tamato"},
{"type":"meat","name":"chicken","rank": 10},
{"type":"diary","name":"eggs"},
{"type":"vegetable","name":"peas","rank": 0},
{"type":"fruit","name":"orange","rank": 9.1},
{"type":"diary","name":"milk","rank": 10},
{"type":"fruit","name":"banana","rank": 9.8}
]};
期望值:
var results = {"docs":[
{"type":"fruit","name":"apple","rank": 10},
{"type":"fruit","name":"banana","rank": 9.8},
{"type":"fruit","name":"orange","rank": 9.1},
{"type":"fruit","name":"grape","rank": 9},
{"type":"meat","name":"fish","rank": 10.1},
{"type":"meat","name":"chicken","rank": 10},
{"type":"meat","name":"beef","rank": 9},
{"type":"vegetable","name":"carrot","rank": 0},
{"type":"vegetable","name":"tamato"},
{"type":"diary","name":"eggs"},
{"type":"vegetable","name":"peas","rank": 0},
{"type":"diary","name":"milk","rank": 10}
]};
提前感谢。谢谢你的帮助。
JSON对象的docs元素是JSON对象的数组,因此可以使用array .sort()方法对JSON对象进行排序(参见:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort)。诀窍是编写一个排序函数,以您希望的方式对JSON对象进行排序。
我将其分解为两个函数,一个按类型排序,另一个按秩排序。
按类型排序时,我们希望水果排序到比肉类低的索引,乳制品和蔬菜排序到比水果或肉类低的索引。我们可以使用compareType中类型数组的索引来帮助我们按类型排序。"水果"的索引大于"肉类"的索引,数组中任何东西("乳制品"answers"蔬菜")的索引都是-1。types数组中的较低索引对应于最终排序数组中的较高索引。如果a。type <B.type,返回1。>
按顺序排序时,高的顺序应按低的顺序排序。最后一个sort函数首先比较对象的类型,如果类型相等,则比较它们的秩。
var results = {"docs":[
{"type":"fruit","name":"apple","rank": 10},
{"type":"vegetable","name":"carrot","rank": 0},
{"type":"fruit","name":"grape","rank": 9},
{"type":"meat","name":"beef","rank": 9},
{"type":"meat","name":"fish","rank": 10.1},
{"type":"vegetable","name":"tamato"},
{"type":"meat","name":"chicken","rank": 10},
{"type":"diary","name":"eggs"},
{"type":"vegetable","name":"peas","rank": 0},
{"type":"fruit","name":"orange","rank": 9.1},
{"type":"diary","name":"milk","rank": 10},
{"type":"fruit","name":"banana","rank": 9.8}
]};
function compareRank(a, b) {
if(a.rank < b.rank) {
return 1;
}
else if(a.rank > b.rank) {
return -1;
}
else {
return 0;
}
}
function compareType(a, b) {
var types = ["meat", "fruit"];
if(a.type === b.type) {
return 0;
}
else if(types.indexOf(a.type) < types.indexOf(b.type)) {
return 1;
}
else {
return -1;
}
}
var docs = results.docs;
docs.sort(function(a, b) {
if(compareType(a, b) === 0) {
return compareRank(a, b);
}
else {
return compareType(a, b);
}
});
相关文章:
- jQuery匹配JSON对象的部分文本
- 在循环中分配json值时,值被覆盖
- 需要帮助设置json数组
- 如何在Javascript中将JSon对象转换为数组
- 我可以在json对象中添加一个函数吗
- 使用JS将数组转换为json对象
- Javascript-如何读取json文件中的列并将其保存在Javascript数组中
- 使用JQuery解析JSON嵌套数组
- 如何在php中按元素按字母顺序排列json文件
- 以树形结构排列JSON
- 比较两个JSON数组并重新排列新的JSON数组格式
- 以表格格式排列JSON数据
- JQuery数组重新排列JSON对象
- 使用角foreach循环来重新排列JSON
- 需要重新排列JSON
- 根据值重新排列JSON的一部分
- JSON菜单按字母顺序排列
- 当数据不按顺序排列时,如何对数组中的json数据进行排序
- JSON数据按月排列/重新排序
- 如何按字母顺序排列JSON元素使用localeCompare()向下一级