2015-07-21 3 views
0

У меня есть массив A, содержащий n массивов. Каждый из n массивов содержит два элемента. Первый - это id, а второй - объект. Для получения дополнительной информации см. Следующий пример:Найти определенный элемент в массиве javascript

A = [ [100, object1], [22, object2], [300, object3]] 

Для данного идентификатора я хочу получить связанный объект. Например, для id = 22, я хочу получить object2.

+0

Можете ли вы использовать underscore.js? – connexo

ответ

2

Loop, проверьте, и вернуть

function getById(id) { 
    for (var i = 0; i < A.length; i++) { 
     if (A[i][0] == id) { 
      return A[i][1]; 
     } 
    } 
    return false; 
} 
+0

В настоящее время я использую 'Coffeescript' –

1

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

function returnObjectById(id) { 
    for (var i=0; i< A.length; i++) { 
     if (A[i][0]==id) { 
      return A[i][1]; 
     } 
    } 
    return false; // in case id does not exist 
} 

В CoffeeScript:

returnObjectById = (id) -> 
    i = 0 
    while i < A.length 
    if A[i][0] == id 
     return A[i][1] 
    i++ 
    false 
    # in case id does not exist 
-1

В CoffeeScript вы можете использовать JS to CF transition

getById = (id) -> 
    i = 0 
    while i < A.length 
    if A[i][0] == id 
     return A[i][1] 
    i++ 
    false 
1

CoffeeScript версия может понравиться:

find_in = (a, v) -> 
    return e[1] for e in a when e[0] == v 

тогда вы могли бы сказать:

thing = find_in(A, 22) 

Вы бы получить undefined, если бы не было никакого v найти.

for e in a является базовым для цикла, а затем when предложение выполняет только тело, когда его условие истинно. Так что цикл функционально эквивалентен:

for e in a 
    if e[0] == v 
     return e[1] 

fine manual покрывает все это.

+0

При использовании for..in в старых IE, имейте в виду, что каждый массив имеет дополнительный член indexOf. – connexo

+0

Можете ли вы объяснить эту строку кода: 'return e [1] для e в a, когда e [0] == v'? Thanks –

+0

@connexo: '' для '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '', '', это не то же самое, что и JavaScript, JavaScript 'in' loop будет' для k объекта 'в CoffeeScript. –

Смежные вопросы