簡體   English   中英

JS Lodash:按值對對象排序,最后為null

[英]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過濾器。

AngularJS控制器:

var result = [];
var keys = _.keys(sortedObject);
angular.forEach(keys, function (key) {
    result.push(sortedObject[key]);
});
$scope.arrayFromObject = result;

AngularJS視圖

<span ng-repeat="item in arrayFromObject | orderBy:'name'"></span>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM