javascript - JS Lodash : Sort object by value, 最后为空

标签 javascript angularjs sorting object lodash

编辑:

我必须将 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/

相关文章:

java - CompareTo 方法如何与 array.sort 一起使用来对数组进行排序?

javascript - 如何使 Google Chrome JavaScript 控制台持久化?

javascript - 自定义上传按钮

html - 一行内的 ng-repeat div 不起作用

java - Java 基元数组上的 QuickSort 与 MergeSort

javascript - 如何使用javascript按组对数组进行排序?

javascript - xmlhttprequest(xhr) 对象 xhr.onerror 和 xhr.upload.onerror 的区别

javascript - 使用 Rangy 选择接下来的 N 个单词

javascript - 无法使用 UI 路由器和 'controller as' 语法访问 View 中的 Controller 属性

javascript - Angular 1.5.7 中动态添加和删除表单字段的 Angular 表单验证