如何根据数组的动态对象

时间:2018-05-01 20:18:24

标签: javascript

这可能是一个愚蠢的问题,但我怎样才能根据它的对象的值(升序#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 }
];

2 个答案:

答案 0 :(得分:1)

您可以按对象的值排序。

&#13;
&#13;
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;
&#13;
&#13;

在IE11中找到对象的第一个键。

&#13;
&#13;
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;
&#13;
&#13;

答案 1 :(得分:0)

您可以定义一个函数,在所有浏览器中为您提供对象值,包括IE。

这个答案比我提出的更好的例子:Alternative version for Object.values()