2015-02-02 3 views
0

У меня есть следующий массив, из которых я пытаюсь выполнить поиск конкретного элемента:поиск массив объектов в JavaScript

grid ({"row": row, "col": col}) 

Можно ли давать рекомендации о том, как найти элемент в этом массив? Я пробовал что-то вроде этого, но я не могу понять, правильно ли я делаю это.

grid.indexOf([row, col]) 

Любые советы были бы замечательными.

+0

Первой строку коды - это не массив;) – kamituel

ответ

0

Внутри вашего массива вы оставляете объекты, поэтому сравнение их только по значению не работает в JS.

Вы можете сделать это старый фьюжн путь (итерационный):

function indexOfCell(row, col){ 
    for(var i=0; i< grid.length;i++){ 
    if(grid[i].row === row && grid[i].col === col){ // this code can get complex, when working with many properties 
     return i; 
    } 
    } 
    return -1; 
} 

Второе решение будет фильтр из массива прототипа:

function filterByRowAndCol(element) { 
    if (element.row === row && element.col === col) { 
    return element; 
    } else { 
    invalidEntries++; 
    } 
} 

var arrByRowAndCol = grid.filter(filterByID); 

Источник: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/filter

+0

Я предполагаю, что сетка представляет собой массив объектов со свойствами row и col. – Beri

+0

Привет, Берри.да это верно – spacechimp

1

Это не массив, это объект.

Для массива вы могли бы просто использовать:

array.forEach(function(element, index, array) {}); 

Поскольку это объект, однако вам нужно сделать немного больше работы:

Object.keys(grid).forEach(function(element, index, array) { 
    if(element === some_random_name) { 
    // Do whatever you need to here. 
    } 
}); 
+1

На самом деле, для поиска в массиве, [ Array.prototype.filter()] (https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Array/filter) или [Array.prototype.find()] (https: // developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/find) было бы лучше. Первая из них широко поддерживается (IE9 и выше). – kamituel

+0

для поиска объекта я бы использовал: for (var element in grid) { if (element === 'search_name') {} } – BrendanMullins

+0

@ BrendanMullins - для этого требуется * hasOwnProperty * test, * Object.keys * is лучший подход. – RobG

0

Это объект, чтобы получить доступ к элементу вашего объекта, который вы можете использовать следующим образом:

grid = {"row": 10, "col": 12 }; 
alert(grid.row); //will alert 10 
alert(grid.col); //will alert 12 
0

Вы работаете с объектом, а не с массивом.

Вам также потребуется уточнить ваш синтаксис, чтобы объект работал с ним правильно. Попробуйте это: var grid = {'row': 'row', 'col': 'col'};

Затем, вы можете перебрать свойства объекта, чтобы найти то, что вам нужно:

var findValue = function (someKey) { 
    for (var property in grid) { 
     if (grid.hasOwnProperty(property)) { 
      if (property === someKey) { 
       return grid.property // return the value 
      } 
     } 
    } 
};