我试图实现一个网络发现搜索,返回所有与我的本地网络连接的设备。
const find = require('local-devices');
// Find all local network devices.
find().then(devices => {
console.log(devices);
})
控制台中返回的数组是这样的:
[
{ name: '?', ip: '192.168.0.174', mac: '00:17:88:65:f4:4d' },
{ name: '?', ip: '192.168.0.222', mac: '80:be:05:73:bc:g5' },
{ name: '?', ip: '192.168.0.190', mac: '0c:fe:45:4d:b8:28' }
]
所以,我已经知道我要找的设备的Mac地址了,我的问题是,我如何在数组中搜索Mac地址,并返回这个设备的特定IP地址? 例如,我把Mac地址 "00:17:88:65:f4:4d "传到一个函数中,这个函数应该返回 "192.168.0.174",我可以把它保存在一个变量中,并在下面的代码中使用。
我也许可以用find()函数来解决这个问题,但是如何告诉代码,我只想要ip adress,而不是保存数组的全部元素呢?我想过这样的方法。
const ip = devices.find('00:17:88:65:f4:4d');
但如果语法正确的话,这将只返回完整的元素。
如果语法是正确的
那么,你的第一步就是解决这个问题。 也许吧。
const element = devices.find(d => d.mac === '00:17:88:65:f4:4d');
现在你应该有了你要找的元素了 null
).
这将只返回完整的元素
如果你只想要该元素的一个属性,就返回该属性。
return element ? element.ip : '';
在这里,如果没有找到匹配的元素,我任意选择了一个空字符串作为默认返回值。 你可以用任何你喜欢的默认值来替换,或者留下返回值。undefined
.
请注意,有 两种 的实例 find
在这里,可能会造成混淆。 进口的 find
被单独调用并返回一个 Promise
. 而在回调中 Promise
是我们使用 .find
的数组上。
const find = require('local-devices');
find().then(devices => {
const element = devices.find(d => d.mac === '00:17:88:65:f4:4d');
console.log(element ? element.ip : '');
});
是从promise回调中返回并在其他地方使用那个解析的promise,还是直接在这个回调中使用产生的值,取决于你的需求。 单个函数无法包围整个操作,同步返回你想要的值,但该函数可以返回解析到值的承诺,也可以接受一个回调,在承诺解析时调用。
var devices = [
{ name: '?', ip: '192.168.0.174', mac: '00:17:88:65:f4:4d' },
{ name: '?', ip: '192.168.0.222', mac: '80:be:05:73:bc:g5' },
{ name: '?', ip: '192.168.0.190', mac: '0c:fe:45:4d:b8:28' }
];
const getIpFromMacAddress = macAddress => {
for (let i = 0; i < devices.length; i++) {
if (devices[i].mac === macAddress){
return devices[i].ip
}
}
return 'device not found'
}
getIpFromMacAddress('00:17:88:65:f4:4d') // "192.168.0.174"
对不起,我只是在回复这个答案,但注意到Wais已经在上面给出了同样的答案!不过这里是一个使用.forEach而不是for循环的例子。
let details = [
{ name: '?', ip: '192.168.0.174', mac: '00:17:88:65:f4:4d' },
{ name: '?', ip: '192.168.0.222', mac: '80:be:05:73:bc:g5' },
{ name: '?', ip: '192.168.0.190', mac: '0c:fe:45:4d:b8:28' }
]
details.forEach((item, index) => {
if(item.mac === "80:be:05:73:bc:g5") {
return item.ip;
}
});
下面就给大家介绍一下经典的方法。
var devices = [
{ name: '?', ip: '192.168.0.174', mac: '00:17:88:65:f4:4d' },
{ name: '?', ip: '192.168.0.222', mac: '80:be:05:73:bc:g5' },
{ name: '?', ip: '192.168.0.190', mac: '0c:fe:45:4d:b8:28' }
]
for(var i = 0; i < devices.length; i++) {
if(devices[i].mac == "00:17:88:65:f4:4d") {
return devices[i].ip;
}
}