如何用Javascript从一个数组中返回一个特定的元素?

问题描述 投票:0回答:2

我试图实现一个网络发现搜索,返回所有与我的本地网络连接的设备。

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'); 

但如果语法正确的话,这将只返回完整的元素。

javascript arrays search find
2个回答
1
投票

如果语法是正确的

那么,你的第一步就是解决这个问题。 也许吧。

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,还是直接在这个回调中使用产生的值,取决于你的需求。 单个函数无法包围整个操作,同步返回你想要的值,但该函数可以返回解析到值的承诺,也可以接受一个回调,在承诺解析时调用。


0
投票
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"

0
投票

对不起,我只是在回复这个答案,但注意到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;
  } 
});

0
投票

下面就给大家介绍一下经典的方法。

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;
  }
}
© www.soinside.com 2019 - 2024. All rights reserved.