[英]JS Lodash: Sort object by value, null last
編輯:
我必須將1個大對象中的多個內容發送到服務器。 對象的一部分包含可以是字符串或null的數據。 我想對對象進行排序,以便我的Angular ng-repeat
顯示首先填充的字段,然后顯示其余字段。
(我知道我應該只通過使用PUT將更新的字段發送到服務器,但這不是當前的選擇。)
我從這樣的JSON對象開始:
var myObject = {
14 : "a",
368 : null,
7800 : null,
3985 : "b",
522 : "c"
}
我想對這個對象進行排序,以便所有不為null的東西都首先出現,如下所示:
{
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 : ""
}
我期望我在這里使事情變得過於復雜,因此,如果有人知道進行這種排序的更簡單(至少是可行的 )方法,請給我啟發:)。
如前所述,對象沒有明確的順序。 您可以將對象發送到服務器並在視圖中對對象進行排序(在您的情況下為AngularJS應用程序)。
要從對象創建有序列表(首先顯示null
值),請從對象創建列表,然后使用AngularJS orderBy
過濾器。
var result = [];
var keys = _.keys(sortedObject);
angular.forEach(keys, function (key) {
result.push(sortedObject[key]);
});
$scope.arrayFromObject = result;
<span ng-repeat="item in arrayFromObject | orderBy:'name'"></span>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.