I have an array with this form
$vars[1][1]["name"] = "John";
$vars[1][1]["lastname"] = "Doe";
$vars[1][2]["name"] = "Ely";
$vars[1][2]["lastname"] = "Tim";
$vars[2][1]["name"] = "Brad";
$vars[2][1]["lastname"] = "Vinnie";
$vars[2][2]["name"] = "Angelina";
$vars[2][2]["lastname"] = "Van";
.....
$vars[10][1]["name"] = "Ela";
$vars[10][1]["lastname"] = "Pearl";
$vars[10][2]["name"] = "Gustavo";
$vars[10][2]["lastname"] = "Tim";
which is in PHP. After that I send it to angularJS and i have
$scope.varArr = data.vars
之后是
<div ng-repeat="(key, det) in varArr| orderBy: key">
{{det.name}} {{det.lastname}}
</div>
问题是它没有按顺序取数组1,2,3…10
$vars[1]在$vars[10]和$vars[2]之后。而不是在数字后面排序,而是在字符串后面排序。
这种情况只有当我有$vars[1][1]和$vars[1][2]…等
如果我只有$ var [1] [1], $ var[2][1],…$vars[10][1]将取数字后面的顺序
在Angular文档中,它说当你使用(key, value)
方法时:
处理这个问题的一种方法是在将数组传递给文档之前将其扁平化为单个维度。关于如何在PHP中"扁平化"多维数组,这个问题有几个答案。您需要知道JavaScript规范没有定义为对象返回的键的顺序。(为了在Angular中减轻这个问题1.3 ngRepeat指令用于按字母顺序排序键。)
Version 1.4删除了字母排序。我们现在依赖秩序浏览器在myObj中运行for key时返回的。似乎浏览器通常遵循按顺序提供键的策略其中定义了它们,尽管当键被删除和恢复。看到https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/delete Cross-browser_issues
如果不需要,建议的解决方法是转换您的对象放入一个数组,该数组按您喜欢的顺序排序然后将其提供给ngRepeat。你可以用这样的过滤器来做或者自己在对象上实现$watch
缺少撇号:
<div ng-repeat="(key, det) in varArr| orderBy: 'key'">
Angular会在你的控制器中寻找函数'key',但这个函数也不存在