用javascript对json数据进行排序
sorting json data in javascript
下面是我拥有的json数据,其中包含状态数组。数组的大小总是2,但数组中元素的顺序不是固定的。数组元素的值可以为null。样本数据如下所示:
{
"status": "SUCCESS",
"status_message": "Susscessfully queried details.",
"total_records": 2,
"m_details":
[
{
"p_id": 1023,
"pname": "india",
"states":
[
{
"state": "karnataka",
"capital": "bangalore"
},
{
"state": null,
"capital": null,
}
]
},
{
"p_id": 1023,
"pname": "india",
"states":
[
{
"state": null,
"capital": null
},
{
"state": "Tamilnadu",
"capital": "chennai"
}
]
}
]
}
我的问题:
- 如何将空值转换为一些默认文本,比如"-"
- 如何按asc或desc顺序对所有状态进行排序
您可以迭代数据中的所有元素,用带有类似回调的迭代器将任何null
值切换到"-"
。
function iterateObject(item, callback) {
if (typeof item === "object" && item !== null) {
if (item instanceof Array) {
for (var i = 0; i < item.length; i++) {
item[i] = iterateObject(item[i], callback);
}
} else {
for (var prop in item) {
if (item.hasOwnProperty(prop)) {
item[prop] = iterateObject(item[prop], callback);
}
}
}
} else {
// call the callback on any item that is not an array or object
return callback(item);
}
return item;
}
var data = {
"status": "SUCCESS",
"status_message": "Susscessfully queried details.",
"total_records": 2,
"m_details":
[
{
"p_id": 1023,
"pname": "india",
"states":
[
{
"state": "karnataka",
"capital": "bangalore"
},
{
"state": null,
"capital": null,
}
]
},
{
"p_id": 1023,
"pname": "india",
"states":
[
{
"state": null,
"capital": null
},
{
"state": "Tamilnadu",
"capital": "chennai"
}
]
}
]
};
// iterate through the object and convert all `null` values to `"-"`
iterateObject(data, function(item) {
return (item === null) ? "-" : item;
});
然后,您可以对每个状态数组进行排序,如下所示:
function sortStates(item) {
var array = item.m_details;
for (var i = 0; i < array.length; i++) {
array[i].states.sort(function(a, b) {
return a.state.localeCompare(b.state);
});
}
}
sortStates(data);
如果您想要相反的排序顺序,那么只需在.sort()
回调中交换参数a
和b
。
工作演示:http://jsfiddle.net/jfriend00/MTQ86/
仅供参考,javascript数组对象有一个排序函数,它实现了一些基本的内置排序功能。如果你需要执行更具体的排序(你这样做了),你可以总是把一个函数传递给排序函数,并实现你自己的自定义逻辑。W3Schools的这篇文章有一些例子,在这里引用了其中一个。。。
var points = [40,100,1,5,25,10];
points.sort(function(a,b){return b-a}); //sorts numbers in descending order
现在,要将null值"转换"为"-"文字,我想您需要为您的问题添加更多细节,这样我才能提供一个好的解决方案。为什么需要转换它们?这个json是从哪里来的?
相关文章:
- 对角度数据表中括号内的数字进行排序
- 角度未排序数据
- 排序数据表
- AngularJs orderby 过滤器无法正确排序数据
- Magento网站-按选项排序:上下箭头与排序数据绑定,只需删除上下箭头即可
- (钛工作室)显示带有排序数据的表视图
- 如何在D3折线图中禁用X轴上的排序数据
- 如何提高Highcharts的性能并避免排序数据出现错误15
- 可排序数据和更新数据库问题
- 使用Laravel 4+从jQuery/ajax保存串行可排序数据
- JavaScript中高效的排序数据结构
- 预排序数据或Angular orderBy哪个性能更好
- HandsonTable通过从ajax加载排序数据
- 在angularJS中排序数据
- Mithril.js:如果视图使用子组件,排序数据不会重新渲染
- 在MemoryStore(或任意数据数组)中排序数据
- js动态改变排序数据值
- 从json中排序数据
- DC/交叉过滤器行图排序数据,馈送图表
- 我如何排序数据表列,其中包含十进制值与$符号- JQuery数据表