数组排序不起作用
Array Sort not working
我有一个对象数组,我正在尝试对其进行排序,但它似乎不起作用。数组中的某些对象具有orderNum
属性,我要对其进行排序。但并非所有对象都具有此属性。
我希望具有orderNum
属性的对象排序到数组中的顶部位置。
以下是我所尝试的:http://jsfiddle.net/7D8sN/
这是我的javascript:
var data = {
"attributes": [
{
"value": "123-456-7890",
"name": "phone"
},
{
"value": "Something@something.com",
"name": "email"
},
{
"value": "Gotham",
"name": "city",
"orderNum": 1
},
{
"value": "12",
"name": "ID"
},
{
"value": "Batman",
"name": "Super Hero",
"orderNum": 2
}
]
};
data.attributes.sort( function (a, b) {
if (a.orderNum < b.orderNum) {
return -1;
}
if (a.orderNum > b.orderNum) {
return 1;
}
return 0;
});
console.log(data);
检查排序函数中是否存在该属性。
data.attributes.sort( function (a, b) {
if ((typeof b.orderNum === 'undefined' && typeof a.orderNum !== 'undefined') || a.orderNum < b.orderNum) {
return -1;
}
if ((typeof a.orderNum === 'undefined' && typeof b.orderNum !== 'undefined') || a.orderNum > b.orderNum) {
return 1;
}
return 0;
});
您必须专门检查属性是否为undefined
。否则,两个测试都会返回false
,因此您将转到return 0
,并将它们视为等同于一切。
data.attributes.sort( function (a, b) {
if (a.orderNum === undefined || a.orderNum < b.orderNum) {
return -1;
}
if (b.orderNum === undefined || b.orderNum < a.orderNum) {
return 1;
}
return 0;
});
您可以检查每个对象是否具有hasOwnProperty("orderNum")
属性,然后对它们进行相应排序。如果一个有,而另一个没有,那么有它的那个会被放在第一位。我假设您是按orderNum升序排序的。
JSFiddle:http://jsfiddle.net/dshell/RFr5N/
data.attributes.sort( function (a, b) {
if ((a.hasOwnProperty("orderNum")) && (b.hasOwnProperty("orderNum")))
{
return a.orderNum - b.orderNum;
}
else if (a.hasOwnProperty("orderNum"))
{
return -1;
}
else if (b.hasOwnProperty("orderNum"))
{
return 1;
}
return 0;
});
您需要的是"规范化"您的输入:
data.attributes.sort( function (a, b) {
var aOrderNum = ( a.orderNum === undefined ) ? -1 : a.orderNum ;
var bOrderNum = ( b.orderNum === undefined ) ? -1 : b.orderNum ;
return aOrderNum - bOderNum;
});
相关文章:
- 循环通过数组的If语句不起作用
- Jquery.each数组推送不起作用
- 将数组的拼接分配给自身时,Javascript控制台打印不起作用
- node.js/javascript/couchdb视图到关联数组似乎不起作用
- 使用复杂数组时Jquery自动完成功能不起作用
- 就地反转数组为什么不起作用
- 对照数组脚本检查文本框中的值不起作用
- For循环与数组不起作用
- 缺陷的JQuery数组,实现不起作用
- JavaScript 数组/循环不起作用
- Jquery数组查询不起作用
- 循环浏览页面上所有选中的复选框并将id拉入数组不起作用
- 数组输入不起作用
- JavaScript的循环问题,将值插入数组将不起作用
- Javascript循环数组无限不起作用
- 映射 jQuery 对象的数组不起作用
- 不需要的数组排序
- 按属性排序的 Javascript 对象数组不起作用
- 对JavaScript对象数组进行排序是不起作用的
- 数组排序不起作用