2014-09-02 72 views
0

獲取指數我有一個多維數組是這樣的:從多維數組

var squares = new Array(); 
      for(var i = 0; i <= 8; i++) 
      { 
       squares[i] = new Array(); 
       for(var j = (i * 20) + 1; j <= 20 * i + 20; j++) 
       { 
        if (squares[i] == null) 
        { 
         squares[i] = ''+j; 
        } 
        else 
        { 
         squares[i].push('' + j); 
        } 
       } 
      } 

我想從多維數組的索引,當我點擊一個正方形:

angular.element('.click').click(function() { 


      var squareId = angular.element(this).attr('id');    //Rutans id 
      for(var k = 0; k <= 8; k++) 
      { 
       var squareIndex = squares[k].indexOf(squareId); 
      } 
      console.log(squareIndex); 

但這僅console.log導致-1。任何人都可以幫助我?

+3

你不是在循環過程與做任何事情squareIndex。循環後的值是您在上次迭代中獲得的值。顯然,最後一個數組中沒有squareId。 – Sacho 2014-09-02 13:54:36

+0

@Sacho:謝謝。但是,我怎麼才能在我的多維數組中獲得squareId的值呢? – user500468 2014-09-02 13:57:16

回答

0

使用indexOf(),你只是檢查該數組中存在的ID。因此,如果它發生在第一個數組中,它將繼續循環它們,並返回-1覆蓋以前的值。

你需要做的就是停止循環,當你找到它並返回k,你正在迭代的數組的索引。

這裏是一個小提琴,希望這有助於 Fiddle

var squares = new Array(); 
    for(var i = 0; i <= 8; i++) 
    { 
     squares[i] = new Array(); 
     for(var j = (i * 20) + 1; j <= 20 * i + 20; j++) 
     { 
      if (squares[i] == null) 
      { 
       squares[i] = ''+j; 
      } 
      else 
      { 
       squares[i].push('' + j); 
      } 
     } 
    } 

console.log(squares); 


$('a').on('click', function(){ 
var squareId = $(this).attr('id'); 
var squareIndex = 0, 
    numberIndex = 0; 

for(var k = 0; k < squares.length; k++) 
{ 
    squareIndex = squares[k].indexOf(squareId); 


    if (squareIndex > -1) { 
     numberIndex = squareIndex; 
     squareIndex = k; 
     break 
    } 
} 

    alert('NumberIndex: '+ numberIndex+' ParentSquareIndex: '+ squareIndex); 
}); 
+0

這個例子是使用jQuery,但不管原理應該是相同的。 – jameslouiz 2014-09-02 14:14:10

+0

你不能設置squareIndex = k? :) – user500468 2014-09-02 14:23:36

+0

你可以,它的工作原理。看小提琴。 – jameslouiz 2014-09-02 14:24:38

0

請看這裏http://plnkr.co/edit/aldjCQRchgESR7IWn367?p=preview我希望這會有所幫助。

<!DOCTYPE html> 
<html ng-app="plunker"> 

    <head> 
    <meta charset="utf-8" /> 
    <title>AngularJS Plunker</title> 
    <script>document.write('<base href="' + document.location + '" />');</script> 
    <link rel="stylesheet" href="style.css" /> 
    <script data-require="[email protected]" src="https://code.angularjs.org/1.2.22/angular.js" data-semver="1.2.22"></script> 
    <script src="app.js"></script> 
    </head> 

    <body ng-controller="MainCtrl"> 
    <p>Hello !</p> 
    <table> 
     <tr ng-repeat="lines in squares track by $index "> 
     <td ng-repeat="nr in lines track by $index" ng-click="getMyId(nr)">{{nr}}</td> 
     </tr> 
    </table> 
    </body> 
</html> 

JS:

var app = angular.module('plunker', []); 

app.controller('MainCtrl', function($scope) { 
    $scope.name = 'World'; 

    var squares = []; 
      for(var i = 0; i <= 8; i++) 
      { 
       squares[i] = []; 
       for(var j = (i * 20) + 1; j <= 20 * i + 20; j++) 
       { 
        if (squares[i] === null) 
        { 
         squares[i] = ''+j; 
        } 
        else 
        { 
         squares[i].push('' + j); 
        } 
       } 
      } 
      $scope.squares = squares; 

      $scope.getMyId = function(id){ 

      alert(id); 

      } 
      console.log(squares); 
});