我知道这很多,但我在这里搜索过,找不到我想要的确切解决方案。
所以,我有一个包含以下值的对象数组:
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。
答案 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.");