2016-04-04 6 views
0


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

device_names = [ 
{ 
    address: 'XX:XX:XX:XX:XX:XX', 
    name: 'device name' 
}, 
    { 
    address: 'XX:XX:XX:XX:XX:XX', 
    name: 'device name' 
}] 

Что я хочу, чтобы проверить, содержит ли массив устройства с конкретным адресом, и возвращает истину, если она есть. , пожалуйста, не предлагайте $.inArray, потому что он всегда возвращает -1 при использовании с массивом объектов.

+0

Я рекомендую lodash или подчеркивание, у них отличные функции для таких вещей. Вы можете, конечно, сделать и я в простом javascript, вам не нужен jquery. Мне нравится lodashs '_.find' для чего-то вроде этого. Для простого js - проверьте этот поток http://stackoverflow.com/questions/8217419/how-to-determine-if-javascript-array-contains-object – ajmajmajma

+1

его легко написать функцию, которая выполняет итерацию массива, чтобы найти первый появление конкретного объекта. возможно, вы надеетесь, что кто-то сможет написать его для вас? –

+1

Возможный дубликат [Найти объект по id в массиве объектов JavaScript] (http://stackoverflow.com/questions/7364150/find-object-by-id-in-an-array-of-javascript-objects) – Shanimal

ответ

0

Прокрутите массив, проверьте соответствие адреса, и если да, верните true.

function checkAddress(address) { 
    for (var i = 0; i<device_names.length; i++) { 
     if (device_names[i].address == address) { 
      return true 
     } 
    } 
} 
-1

Если вы готовы использовать underscore.js:

function deepFind(array, needle) { 
    return _.findIndex(array, function(value) { 
     return _.isEqual(value, needle); 
    }); 
} 

Использование:

deepFind(device_names, { 
      address: 'XX:XX:XX:XX:XX:XX', 
      name: 'device name' 
}); 

возвращает первый индекс в котором находится данное устройство. Если его нет, он вернет -1.

if(deepFind(...) > -1) 
    console.log("The device is found."); 
+0

Предложить альтернативные основные библиотеки обычно не рекомендуется. – isherwood

+0

Если вы собираетесь скопировать пример кода, пожалуйста, приложите его к ответу. – ajmajmajma

+0

Что вы имеете в виду с примером кода? Функция, которую я предложил, делает именно то, что необходимо. Он находит в массиве объект, равный данной игле. – Toonijn

0

Можете ли вы просто использовать $ .grep вместо этого?

Что-то вроде этого ... $ .grep (device_names, функция (d) {возвращение d.address == "XX: XX: XX: XX: XX: XX";})

0

Вы можете создайте сопоставление адресов с другим массивом и используйте indexOf, чтобы узнать, находится ли адрес в массиве.

var device_names = [ 
{ 
address: '11:XX:XX:XX:XX:XX', 
name: 'device name' 
}, 
{ 
address: '22:XX:XX:XX:XX:XX', 
name: 'device name' 
}] 

var device_addresses = device_names.map(function(obj){  
    return obj.address; 
}); 


device_addresses.indexOf("22:XX:XX:XX:XX:XX"); // returns 1 
Смежные вопросы