我正在尝试javascript中的所有知识。有没有办法根据密钥对此进行排序?
var myObj =[{"2":"installation.diagnostics.status"},{"4":"installation.diagnostics.status"},{"3":"installation.diagnostics.status"}];
这是我的代码!!
var result=JSON.stringify(navMenu);
eval('var obj='+result);
console.log(obj);
Object.keys(obj)
.sort()
.forEach(function (k) {
console.log(obj[k]);
});
到
var myObj =[{"2":"installation.diagnostics.status"},{"3":"installation.diagnostics.status"},{"4":"installation.diagnostics.status"}]
答案 0 :(得分:2)
假设:
var myObj =[{"2":"installation.diagnostics.status"},{"4":"installation.diagnostics.status"},{"3":"installation.diagnostics.status"}];
您可以使用以下方式对其进行排序:
myObj.sort(function(a, b){return Object.keys(a)[0] - Object.keys(b)[0]});
您可能需要Object.keys的polyfill来支持旧版浏览器。
请注意,这会将第一个返回的属性名称排序为数字。如果 myObj 的任何成员拥有多个自己的属性,或者第一个返回的数字不是数字,则可能无法按预期工作。
答案 1 :(得分:1)
您需要使用comparator function。这是按字符串排序的对象键。
function compare(a, b) {
var ak = Object.keys(a)[0];
var bk = Object.keys(b)[0];
if (ak < bk) return -1;
if (ak > bk) return 1;
return 0;
}
myObj.sort(compare);
答案 2 :(得分:0)
试试这个:
(function (s) {
var t = {};
Object.keys(s).sort().forEach(function (k) {
t[k] = s[k]
});
return t
})(myObj)
它对我有用。
答案 3 :(得分:0)
function sortArrayOfObjectsByKey(array, key, order){
// can sort forward or in reverse - can be passed as integer or string
// if order not passed in, defaults to 1 (forward)
order = !order ? 1 : order;
if (order === -1 || order.toString().toLowerCase() === "reverse"){
array.sort(function(first, second) {
if (first[key] < second[key]) { return 1; }
else if (first[key] > second[key]) { return -1; }
return 0;
});
}
else {
array.sort(function(first, second) {
if (first[key] < second[key]) { return -1; }
else if (first[key] > second[key]) { return 1; }
return 0;
});
}
return array;
}