检查数组是否包含特定对象

时间:2016-04-04 20:43:57

标签: javascript jquery arrays object


我知道这很多,但我在这里搜索过,找不到我想要的确切解决方案。
所以,我有一个包含以下值的对象数组:

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

我想要检查此数组是否包含具有特定地址的设备,如果存在,则返回true。 请不要建议$.inArray,因为它与对象数组一起使用时总是返回-1。

4 个答案:

答案 0 :(得分:0)

循环遍历数组,检查地址是否匹配,如果匹配,则返回true。

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

答案 1 :(得分:0)

你能用$ .grep代替吗?

像这样...... $ .grep(device_names,function(d){return d.address ==&#34; XX:XX:XX:XX:XX:XX&#34 ;;})

答案 2 :(得分: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

答案 3 :(得分:-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.");