我有一个数组,每行看起来像这样:
array = [[ 'A2', 'A3', 'X' ], [ 'A1', 'Z', 'VZZ' ]]
数组没有键。 目前我只是通过值的位置(即数组[0],数组[1]等)来访问值,它工作正常。
但是我想订购行,比如第一个值。
我怎么能在angularJs中做到这一点?
我尝试过...... | orderBy:$ index但它不起作用。
答案 0 :(得分:4)
只是香草 Array.sort
!
非常基本的例子!
var arr = [[ 'A2', 'A3', 'X' ], [ 'A1', 'Z', 'VZZ' ] , [ 'A4', 'P', 'VZZ' ] , [ 'A3', 'X', 'VZZ' ]];
console.dir( arr.sort(function(a , b){ return a[0] < b[0]} );
&#13;
答案 1 :(得分:3)
我不知道在这种情况下使用orderBy,但您可以使用这样的自定义过滤器:
假设你的标记是这样的:
<div ng-repeat="item in array">
</div>
现在,添加如下自定义过滤器:
<div ng-repeat="item in array | customOrder">
</div>
现在像这样定义过滤器:
app.filter('customOrder', function() {
return function(collection) {
//collection is your complete array
//sort the collection
collection.sort(function(a, b) {
return a[0] - b[0]; //sort the collection using the first element of the array
})
//finally returned the sorted collection
return collection;
}
})
答案 2 :(得分:2)
您不需要像其他答案建议的自定义排序功能,也不需要在使用之前将其分类为香草JS。
您可以将它排序为:
... | orderBy: 'this[1]'
按秒(索引1)元素排序。
你也可以通过减号来反转它:
... | orderBy: '-this[1]'
以下是一个例子:
var app = angular.module('helloworld', []);
app.controller('TestController', function () {
var test = this;
this.orderIndex = 'this[1]';
this.data = [
[ 'A2', 'A3', 'X' ],
[ 'A1', 'Z', 'VZZ' ]
];
});
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.4.7/angular.min.js"></script>
<table ng-app="helloworld" ng-controller="TestController as test" border="1" cellspacing=0 cellpadding=3>
<tbody>
<tr ng-repeat="row in test.data | orderBy:test.orderIndex">
<td ng-repeat="column in row">{{ column }}</td>
</tr>
</tbody>
</table>
&#13;
修改强>
我无法仅仅操作数字,但是当我放置一个变量而不是整个orderBy
条件时,它就能正常工作。您可以使用变量替换整个部分this[0]
并自行操作。
所以现在你必须找到一种方法来操纵这个字符串。
请检查上面编辑过的代码段,看看这个想法。
希望这会有所帮助。
答案 3 :(得分:0)
为orderBy定义一个函数,该函数返回每个子数组的第一个元素
早期帖子here
中的示例答案 4 :(得分:0)
如果您按照自己的说法对html进行迭代,可以使用orderBy并执行以下操作:
HTML:
<div ng-controller="MyCtrl">
<div ng-repeat="val in array | orderBy:mySortFunction">{{val}}</div>
</div>
控制器:
function MyCtrl($scope) {
$scope.array = [[ 'A2', 'A3', 'X' ],[ 'A1', 'Z', 'VZZ' ]];
$scope.mySortFunction = function(v) {
return v[0];
};
}
答案 5 :(得分:0)
一个像你的例子一样负责字母数字比较的解决方案:
array = [[ 'A2', 'A3', 'X' ], [ 'A1', 'Z', 'VZZ' ]];
//pattern that takes care of alphanumeric
var reA = /[^a-zA-Z]/g;
var reN = /[^0-9]/g;
console.log(array.sort(function(a,b){
var aA = a[0].replace(reA, "");
var bA = b[0].replace(reA, "");
if(aA === bA) {
var aN = parseInt(a[0].replace(reN, ""), 10);
var bN = parseInt(b[0].replace(reN, ""), 10);
return aN === bN ? 0 : aN > bN ? 1 : -1;
} else {
return aA > bA ? 1 : -1;
}
}))
&#13;
答案 6 :(得分:0)
我没有权限评论@dragoste回复,但我把它放在这里。
@ Cheyenne55,要通过视图添加参数,您需要将其添加到控制器的$ scope(允许您直接从视图中访问),在下面的示例中,您可以通过选择器选择参数:
JS:
$query = new WP_Query(array(
'caller_get_posts'=> 1,
'order' => 'DESC',
'post__not_in' => array($current_post_id),
'posts_per_page'=> 3,
'tag__in' => $tag_ids,
));
HTML:
$scope.parameterOptions = [{
'title':'first',
'reference': 0
},{
'title':'second',
'reference': 1
},{
'title':'third',
'reference': 2
}];
$scope.parameterOptions = $scope.parameterOptions[0];
答案 7 :(得分:0)
实际上,由于您的一些答案,我找到了解决方案。
当我写信给@dragoste时,我正在寻找的是使用&#34;&#39;这[0]&#39;&#34;在ngRepeat的orderBy子句中。
但是我有另一个要求是动态用于对数组进行排序的位置,即。而不是&#34;&#39;这[0]&#39;&#34;我需要&#34;&#39;这[索引]&#39;&#34;其中index是var。
但经过测试,我发现你不能在特定的地方传递var,因为完整的句子实际上就是这样:
ngRepeat="rows in row | orderBy:'this[0]'"
要解决这个问题,你需要写下:
ngRepeat="rows in row | orderBy:index"
并在控制器中使用它:
$scope.index = 'this[' + position + ']';
通过ng-click或任何
设置var位置的位置