2014-09-02 3 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); 

Но это только результат -1 с помощью console.log. Кто может мне помочь?

+3

Ты ничего с squareIndex не делать во время цикла. Его значение после цикла - это значение, которое вы получили на последней итерации. По-видимому, в вашем последнем массиве нет квадрата. – Sacho

+0

@ Сачо: Спасибо. Но как я могу получить значение squareId в моем многомерном массиве? – user500468

ответ

0

Используя indexOf(), вы проверяете, что идентификатор существует внутри этого массива. Поэтому, если он встречается в первом массиве, он будет продолжать цикл над ними, возвращая -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

+0

Вы не можете установить squareIndex = k? :) – user500468

+0

Вы можете, он работает. Посмотри на скрипку. – jameslouiz

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); 
}); 
Смежные вопросы