2013-09-19 5 views
2

У меня есть 2 массивов:Сравнения массивов с многомерным массивом

labels = ["water", "sever", "electricity"]; 
services = [0:[0:"1",1:"sever"], 1:[0:"3",1:"park"], 3:[0:"4",1:"gas"]]; 

Я хочу, чтобы проверить, если ANY из labels значения в services или нет (True или False).

Каков наилучший способ архивирования этого с помощью jquery?

EDIT 1:

Да, я сделал ошибку, задавая вопрос, services является JSON объект.

UPDATE

второе решение Bregi является то, что мне было нужно. .some выполняет цель.

var isInAny = labels.some(function(label) { 
    return services.some(function(s) { 
    return s[1] == label; 
    }); 
}); 
+2

Недействительный синтаксис JavaScript –

+0

jQuery здесь не помогает. Проверьте библиотеку Underscore.js. Службы – Bergi

+0

выглядят как объект для меня. – lbstr

ответ

1

Используйте some Array method (хотя, возможно, потребуется Призонная шайба его для унаследованных сред):

var isInAny = labels.some(function(label) { 
    // since we don't know whether your services object is an actual array 
    // (your syntax is invalid) we need to choose iteration/enumeration 
    if (typeof services.length == "number") { 
     for (var i=0; i<services.length; i++) 
      if (services[i][1] == label) 
       return true; 
    } else { 
     for (var p in services) 
      if (services[p][1] == label) 
       return true; 
    } 
    return false; 
}); 

Если services действительно массив, вы можете также использование

var isInAny = labels.some(function(label) { 
    return services.some(function(s) { 
     return s[1] == label; 
    }); 
}); 
+0

'services' - это массив, и ваше второе решение отлично работает. – apaleja

1

Предполагая, что эти должны быть фигурные скобки вместо скобок в services

labels.some(function (label) { 
    for (var x in services) { 
     if (services.hasOwnProperty(x)) { 
      return services[x][1] === label; 
     } 
    } 
}); 

http://jsfiddle.net/WwsLk/

+0

'services' - это JSON, созданный из базы данных. Я не уверен, почему вы сказали * скобки вместо скобок в сервисах *. Это будет полезно, если вы сможете дать дополнительную информацию об этом. и Да '.some' отлично работает по мере необходимости, но с некоторыми изменениями в вашем коде (решение @ Bergi's дает правильные результаты в моем случае). – apaleja

+0

@anand bracket: '[', brace: '{'. Какие изменения? –

+0

Я использую код выше с помощью скобок ('' ''). – apaleja

1

Это часто отвечал здесь. Возможно, вам захочется посмотреть ^^

Но, чтобы дать вам ответ: используйте $ .each для сервисов для генерации нового массива со строками и сравните это с массивом меток.

Это вы должны получить представление: Compare two multidimensional arrays in javascript

+0

Этот вопрос имеет то же название, но совсем другая тема. – Bergi

+0

-1 для комментариев, не читая полный вопрос. – apaleja

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