2015-04-01 2 views
1

У меня есть данные, как например:Поиск первого индекса в массиве массивов с Javascript

[['Account 1', 122.00], ['Account 2', 342.33], ['Account 3', 103.32]] 

Я хочу, чтобы иметь возможность проверить, если строка существует в любом из первых индексов массивов и найти его индекс в общем массиве. Другими словами:

index = find(arr, 'Account 2') // This would return 1 

Есть ли у JS что-то внутреннее, что может это сделать?

+0

Для любых таких коллекций/функций массивов, использовать красивый и элегантный underscore.js (http://underscorejs.org/). Я уверен, что вы можете найти функции, которые вам нужны в этой библиотеке. – wonderbell

ответ

4

В ES6 будет findIndex method, который сделает именно то, что вы хотите здесь. Однако вам, вероятно, понадобится shim it.

var arr = [['Account 1', 122.00], ['Account 2', 342.33], ['Account 3', 103.32]] 
var index = arr.findIndex(function(item) { return item[0] == 'Account 2'; }) // 1 
+0

Это то, что я искал. Спасибо. –

1

Не уверен, что если что-то построили, но вы всегда можете запустить простой цикл

var index; 
for(var i = 0; i < yourArray.length; i++) 
    if(yourArray[i][0] == 'Account 2') 
    { 
     index = i; 
     break; 
    } 

Это сделает индексную переменную индекса, который вы ищете. Вы можете сделать это функцией в своем собственном коде, чтобы избежать повторения кода.

+1

'int' - не javascript? – Bergi

+0

Хороший улов. Кодирование в C# и vba весь день. Ред. – 9Deuce

+2

Nop. Вы не правы. Это возвращает индекс LAST. :) –

0

Это может удовлетворить ваши потребности:

var arr = [['Account 1', 122.00], ['Account 2', 342.33], ['Account 3', 103.32]]; 

function find(data, term){ 
    ret = null; 
    data.forEach(function(item, index){ 
     if (item[0] === term) 
      ret = index; 
    }); 
    return ret; 
}; 

скрипку: http://jsfiddle.net/eguj3d5e/

+0

У тебя такая же проблема, как у меня. Если термин, который вы ищете, находится в массиве дважды, он возвращает индекс последнего экземпляра. http://jsfiddle.net/eguj3d5e/1/ – 9Deuce

0

как это работает ...

var arr = [['Account 1', 122.00], ['Account 2', 342.33], ['Account 3', 103.32]]; 

var find = function(array, string) { 
    var ret; 
    array.forEach(function(arr, index) { 
     if(arr[0] === string){ 
      ret = index; 
     } 
    }); 
    return ret; 
} 

find(arr, 'Account 2'); 
+0

Ваша функция 'find' ничего не возвращает. – Bergi

+0

true написал это слишком быстро – Thegree0ne

0

Вот как сделать это с помощью с открытым исходным кодом проекта jinqJs

См. Fiddle Example

var myarr = [['Account 1', 122.00], ['Account 2', 342.33], ['Account 3', 103.32]]; 
var result = jinqJs().from(myarr).where(function(row){return row[0] === 'Account 2'}).select(); 
Смежные вопросы