DGT
DGT

Reputation: 2654

a function to search array

How can I search for an element within a nested array. Following is what the array looks like

arr = [
   ["choice1", ['a', [2, 4]], ['b', [1, 3, 4]], ['c', [3, 4]]],
   ["choice2", ['b', [1, 4]], ['c', [1, 3]]],
   ["choice3", ['b', [1, 2, 4]], ['c', [1, 2, 3, 4]]]
]

if 'a' is equal to '2' then the following function has to return "choice1" and "choice3" in the 'result':

function arraySearch(arr, a) {
   var result = [];
   for(var i = 0; i < arr.length; i++) {
      // compare each arr[i] with 'a' for the very first occurrence, and move the next array
      if(arr[i].search(a)){
         result.concat(arr[0]);   
      }
   }
   return result;
}

Please help. Many thanks in advance.

Upvotes: 0

Views: 191

Answers (2)

second
second

Reputation: 28655

something like

arr = [
    ["choice1", ['a', [2, 4]], ['b', [1, 3, 4]], ['c', [3, 4]]],
    ["choice2", ['b', [1, 4]], ['c', [1, 3]]],
    ["choice3", ['b', [1, 2, 4]], ['c', [1, 2, 3, 4]]]
    ];

find = function(arr, a) {

    var found = [];
    var foundCurrent;

    // for each 'choice'
    for (var choice = 0; choice < arr.length; choice++) {
        foundCurrent = false;

        // look at each entry in the array that is arr[current][1]
        for (var entry = 1; entry < arr[choice].length; entry++) {
            // search these for the value
            if (arr[choice][entry][1].indexOf(a) != -1) {
                if (!foundCurrent) {
                    found[found.length] = arr[choice][0];
                }
                foundCurrent = true;
            }
        }
    }
    return found;
};


find(arr, 2);
>> [choice1, choice3]

Upvotes: 2

Joeri Sebrechts
Joeri Sebrechts

Reputation: 11156

It's not clear to me exactly what you need.

If you want to know whether an array contains an element, use Array.indexOf.

Upvotes: 0

Related Questions