编辑:
我必须将 1 个大对象中的多个内容发送到服务器。对象的一部分包含可以是字符串或 null 的数据。我想对我的对象进行排序,以便我的 Angular ng-repeat 首先显示已填写的字段,然后显示其余字段。
(我知道我应该只使用 PUT 将更新的字段发送到服务器,但现在这不是一个选项。)
<小时/>我从一个 JSON 对象开始,如下所示:
var myObject = {
14 : "a",
368 : null,
7800 : null,
3985 : "b",
522 : "c"
}
我想对这个对象进行排序,以便所有不为空的东西都排在前面,如下所示:
{
14 : "a",
3985 : "b",
522 : "c",
368 : null,
7800 : null
}
我已经在这里找到了各种答案,但没有一个真正有效。我已经尝试过类似的方法,但排序不正确:
var sortEmptyLast = function (a, b) {
return ((a.v.length < b.v.length) ? 1 : ((a.v.length > b.v.length) ? -1 : 0));
};
var myArray = [];
for (var key in myObject) {
var value = myObject[key] || "";
myArray.push({k: key, v: value});
}
myArray = myArray.sort(sortEmptyLast);
var sortedObject = _.zipObject(_.map(myArray, function (x) {
return [x.k, x.v];
}));
我的sortedObject
将返回这个:
{
14 : "a",
368 : "",
522 : "c",
3985 : "b",
7800 : ""
}
我希望我在这里把事情变得过于复杂,所以如果有人知道一种更简单的(或至少;一种工作)的排序方式 - 请启发我:)。
最佳答案
如上所述,对象没有明确的顺序。您可以将对象发送到服务器并在 View 中对对象进行排序(在您的情况下为 AngularJS 应用程序)。
要从对象创建有序列表(首先显示 null
值),请从对象创建列表并使用 AngularJS orderBy
过滤器。
AngularJS Controller :
var result = [];
var keys = _.keys(sortedObject);
angular.forEach(keys, function (key) {
result.push(sortedObject[key]);
});
$scope.arrayFromObject = result;
AngularJS View
<span ng-repeat="item in arrayFromObject | orderBy:'name'"></span>
关于javascript - JS Lodash : Sort object by value, 最后为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25720420/