如何在Javascript函数中检查条件

How to check condition in Javascript function?

本文关键字:检查 条件 函数 Javascript      更新时间:2023-09-26

我是Javascript的新手。我有一个JS方法。我有很多wifi网络列表。但几乎每次SSIDSecurityMode都是一样的。如果两者相同,我想进行筛选。就像假设SSID是"sampleWifi"&SecurityMode是"PSK",并且相同的SSIDSecurityMode将再次出现。如何避免添加列表数组。

我的代码如下:

device.networkList = [];
  for (var i = 1; i <= jqXHR.responseJSON.length; i++) {
    site = jqXHR.responseJSON[i - 1];
    device.networkList.push({
      name: site["AvailableNetworks." + i + ".SSID"],
      signal: site["AvailableNetworks." + i + ".SignalStrength"],
      security: site["AvailableNetworks." + i + ".SecurityMode"]
    });
  }

输出为:A PSK,B PSK,C PSK,D PSK,A PSK、B PSK、R PSK、S PSK

预期输出:A PSK、B PSK、C PSK、D PSK、R PSK、S PSK

注:这里相同的A PSK,B PSK在数组中重复。但我不想在数组中添加相同的重复值。

如何放置一个条件是SecurityMode将出现它不应该添加设备.networkList数组。

请帮帮我。

感谢

正如Rayon所说,您只需要遍历数组并检查之前是否给出了类似的值。

它可以是这样一个函数:

function isDuplicate(networks, name, security) {
    for (var i = 0; i < networks.length; i++) {
        if(networks[i].name == name && networks[i].security == security) // Found duplicate
            return true;
    }
    return false; // Doesn't already exist
}

您可以使用对象或Set(如果支持ES6(来跟踪您已经添加的内容,然后在条件中检查Set。您可以通过ssid和securityMode的组合为集合创建一个密钥,这样您就可以在一个密钥中对这两项进行说明;

device.networkList = [];
var soFar = new Set();
jqXHR.responseJSON.forEach(function(site, index) {
    var key = site.SSID + site.securityMode;
    var i = index + 1;
    if (!soFar.has(key)) {
        device.networkList.push({
            name: site["AvailableNetworks." + i + ".SSID"],
            signal: site["AvailableNetworks." + i + ".SignalStrength"],
            security: site["AvailableNetworks." + i + ".SecurityMode"]
        })
        soFar.add(key);
    }
});

请参阅JavaScript中的模拟集?对于CCD_ 1 polyfill。

是的。

 var sap_ssid ;
  var sap_signalStrength;
  var sap_securityMode;
  device.networkList = [];
  for (var i = 1; i <= jqXHR.responseJSON.length; i++) {
      site = jqXHR.responseJSON[i - 1];
      sap_ssid = site["AvailableNetworks." + i + ".SSID"];
      sap_signalStrength = site["AvailableNetworks." + i + ".SignalStrength"];
      sap_securityMode = site["AvailableNetworks." + i + ".SecurityMode"];
      if (device.networkList.length == 0)
      {
          device.networkList.push({
                                  name: sap_ssid,
                                  signal: sap_signalStrength,
                                  security: sap_securityMode
                                  });
      }
      else{
          var isfind = false;
          for(var j = 0; j < device.networkList.length; j++)
          {
              if (device.networkList[j].name == sap_ssid && device.networkList[j].security == sap_securityMode)
              {
                  isfind = true;
                  break;
              }
          }

          if (!isfind)
          {
              device.networkList.push({
                                      name: sap_ssid,
                                      signal: sap_signalStrength,
                                      security: sap_securityMode
                                      });
          }
      }
  }

您需要有一个函数或代码来读取数组中的所有值,并通过SSID和SecurityMode进行验证,对于用户定义的对象,数组中不存在用于检查的本地函数。

通用功能:

function exists(array, func) {
    var value = false;
    for (var i = 0; i < array.length; i++) {
        value = func(array[i]);
        if (value == true) {
            break;
        }
    }
    return value;
};

数据:

var array = [];
array.push({ name: "foo", signal: "123", security: "integrated" });
array.push({ name: "bar", signal: "456", security: "none" });
array.push({ name: "zaz", signal: "984", security: "ntm" });

用法:

var foo = exists(array, function (item) {
    return item.name == "foo" && item.security == "integrated";
});
console.log(foo); // true