这可能是一个愚蠢的问题,但我怎样才能根据它的对象的值(升序#1到6)对下面给出的数组进行排序。
我无法使用对象密钥作为标识符,因为它是动态的,并会根据用户的设置进行更改。我使用评论的解决方案,但它在IE中不起作用,因为IE还不支持“Object.values”。
$scope.data = [
{ Type: 6 },
{ Path: 1 },
{ Text: 2 },
{ Name: 3 },
{ Icon: 5 },
{ Case: 4 }
];
$scope.data.sort(function (a, b) {
// This commented solution works fine in Chrome and FF, but not in IE since IE doesn't support "Object.values" yet.
//if (Object.values(a) < Object.values(b))
// return -1;
//if (Object.values(a) > Object.values(b))
// return 1;
//return 0;
if (a < b)
return -1;
if (a > b)
return 1;
return 0;
});
// Desired Result
$scope.data = [
{ Path: 1 },
{ Text: 2 },
{ Name: 3 },
{ Case: 4 },
{ Icon: 5 },
{ Type: 6 }
];
答案 0 :(得分:1)
您可以按对象的值排序。
var data = [{ Type: 6 }, { Path: 1 }, { Text: 2 }, { Name: 3 }, { Icon: 5 }, { Case: 4 }];
data.sort((a, b) => Object.values(a) - Object.values(b));
console.log(data);
&#13;
在IE11中找到对象的第一个键。
var data = [{ Type: 6 }, { Path: 1 }, { Text: 2 }, { Name: 3 }, { Icon: 5 }, { Case: 4 }];
data.sort(function (a, b) {
return a[Object.keys(a)[0]] - b[Object.keys(b)[0]];
});
console.log(data);
&#13;
答案 1 :(得分:0)
您可以定义一个函数,在所有浏览器中为您提供对象值,包括IE。
这个答案比我提出的更好的例子:Alternative version for Object.values()