Tengo una matriz multidimensional como esta:

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);
                    }
                }
            }

Quiero obtener el índice de la matriz multidimensional cuando hago clic en un cuadrado:

   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);

Pero esto solo da como resultado -1 por console.log. ¿Alguien que pueda ayudarme?

0
user500468 2 sep. 2014 a las 17:46

2 respuestas

La mejor respuesta

Usando indexOf () solo está verificando que la ID existe dentro de esa matriz. Entonces, si ocurre en la primera matriz, continuará en bucle sobre ellos y devolverá -1 sobrescribiendo el valor anterior.

Lo que debe hacer es detener el ciclo cuando lo encuentre y devolver k, el índice de la matriz por la que está iterando actualmente.

Aquí hay un violín, espero que esto ayude 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
jameslouiz 2 sep. 2014 a las 14:36

Consulte aquí http://plnkr.co/edit/aldjCQRchgESR7IWn367?p=preview i Espero que eso ayude.

<!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="angular.js@1.2.x" 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);
});
0
sylwester 2 sep. 2014 a las 14:17