Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript JS Lodash:按值排序对象,最后为空_Javascript_Angularjs_Sorting_Object_Lodash - Fatal编程技术网

Javascript JS Lodash:按值排序对象,最后为空

Javascript JS Lodash:按值排序对象,最后为空,javascript,angularjs,sorting,object,lodash,Javascript,Angularjs,Sorting,Object,Lodash,编辑: 我必须在一个大对象中发送多个内容到服务器。对象的一部分包含可以是字符串或null的数据。我想对对象进行排序,以便我的Angularng repeat首先显示已填充的字段,然后显示其余字段 (我知道我应该只使用PUT将更新后的字段发送到服务器,但现在这不是一个选项。) 我从一个JSON对象开始,如下所示: var myObject = { 14 : "a", 368 : null, 7800 : null, 3985 : "b", 522

编辑:

我必须在一个大对象中发送多个内容到服务器。对象的一部分包含可以是字符串或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];
}));

我希望我在这里把东西复杂化了,所以如果有人知道一种更简单(或者至少是一种工作方式)的排序方法,请告诉我:)

如上所述,对象没有明确的顺序。您可以将对象发送到服务器并在视图中对对象进行排序(在您的示例中是AngularJS应用程序)

要从对象创建有序列表,首先显示
null
值,从对象创建列表并使用AngularJS
orderBy
过滤器

AngularJS控制器: AngularJS视图


sortedObject应该是一个列表,因为对象属性从不排序,但列表中的项目是。您希望通过
sortedObject
的有序属性实现什么?无法对对象进行排序。请您描述一下您试图解决的真正问题,而不是“几乎”有效的解决方案。)另外,你检查过相关的问题了吗(比如说)?编辑了我的问题,希望你现在能更好地理解它。正如上面所说的,对象无法排序。保持秩序。
{
    14   : "a", 
    368  : "", 
    522  : "c", 
    3985 : "b", 
    7800 : ""
}
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>