Angularjs:如何命令没有键的数组?

时间:2015-10-08 13:40:46

标签: javascript arrays angularjs

我有一个数组,每行看起来像这样:

array = [[ 'A2', 'A3', 'X' ], [ 'A1', 'Z', 'VZZ' ]]

数组没有键。 目前我只是通过值的位置(即数组[0],数组[1]等)来访问值,它工作正常。

但是我想订购行,比如第一个值。

我怎么能在angularJs中做到这一点?

我尝试过...... | orderBy:$ index但它不起作用。

8 个答案:

答案 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;
&#13;
&#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]'

以下是一个例子:

&#13;
&#13;
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;
&#13;
&#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];
    };
}

Fiddle

答案 5 :(得分:0)

一个像你的例子一样负责字母数字比较的解决方案:

&#13;
&#13;
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;
&#13;
&#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位置的位置