Как получить элемент из объекта JavaScript? - PullRequest
4 голосов
/ 18 августа 2010

Как я могу получить элемент из объекта JavaScript:

var items = [
  {
    ITEM:1,
    AMOUNT:10
  },
  {
    ITEM:2,
    AMOUNT:20
  }
];

Я хочу иметь возможность сделать что-то вроде этого:

$(items).filter(ITEM == 1).AMOUNT;

... что бы вернуть 10.

Ответы [ 2 ]

6 голосов
/ 18 августа 2010

Вы создаете массив объектов.Если элементы вставлены по порядку, вы можете использовать:

items[0].AMOUNT;   // return the amount of the first item in the array

Однако (при использовании простого JavaScript) вы, возможно, предпочтете использовать хэш-таблицу объектов JavaScript и использовать что-то вроде этого:

var items = {
    item1: {
       amount: 10
    },
    item2: {
       amount: 20
    }
};

Тогда вы сможете использовать либо нижнюю запись:

items['item1'].amount;

... или точечную запись:

items.item1.amount;

Решение @ casablanca является допустимой альтернативой, но обратите внимание, что метод filter() выполняется в O (n) , поскольку предоставленный селектор тестируется для каждого элемента массива.С другой стороны, элемент из хеш-таблицы можно найти в O (1) (постоянное время).

3 голосов
/ 18 августа 2010

Вы можете использовать метод Array filter, который возвращает новый массив, содержащий все соответствующие элементы. (может быть более одного соответствующего элемента)

var results = items.filter(function(obj) { return obj.ITEM == 1; });
for (var i = 0; i < results.length; i++)
  alert(results[i].AMOUNT);

Обратите внимание, что IE6 (я не уверен в новых версиях) не поддерживает метод filter. Вы всегда можете определить его самостоятельно, если он не существует:

if (typeof Array.prototype.filter == 'undefined')
  Array.prototype.filter = function(callback) {
    var result = [];
    for (var i = 0; i < this.length; i++)
      if (callback(this[i]))
        result.push(this[i]);
    return result;
  }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...