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

Check whether an array contains a specific object

本文关键字:对象 包含特 是否 数组 检查      更新时间:2024-01-14


我知道这种情况经常发生,但我在这里搜索过,没有找到确切的解决方案
因此,我有一个包含以下值的对象数组:

 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。

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

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

您可以直接使用$.grep吗?

像这样的。。。$.grep(设备名称,函数(d){return d.address="XX:XX:XX:XX:XX-XX:XX";})

您可以创建地址到另一个数组的映射,并使用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

如果您准备使用undercore.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.");