2016-09-29 3 views
0

Я новичок в Javascript. У меня есть метод JS. У меня так много списков сети Wi-Fi. Но почти время SSID и SecurityMode подходит как же. Я хочу фильтровать, если оба они одинаковы. Как допускают SSID является "sampleWifi" & SecurityMode является "PSK" и тот же SSID и SecurityMode приходят снова. Как избежать этого, чтобы добавить массив списка.Как проверить состояние в функции Javascript?

Мой код, как показано ниже:

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"] 
    }); 
    } 

Выход это: ФМн, В ФМн, С ФМн, D ФМн, А ФМн, В ФМн, R ФМн, S ФМн

Ожидаемые результаты: A PSK, B PSK, C PSK, D PSK, R PSK, S PSK

Примечание: Здесь одинаковые PSK, B PSK повторяются в массиве. Но я не хочу добавлять одинаковое дублирующее значение в массив.

Как поставить условие - SecurityMode придет, его не следует добавлять device.networkList массив.

Пожалуйста, помогите мне.

Благодаря

+0

Просто проверьте, если вы уже ввели то же значение в 'array' – Rayon

+0

Как проверить его в JS. это мой вопрос :) –

+0

Помните 'for-loop',' if-condition'? – Rayon

ответ

1

Да, я понял.

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 
             }); 
      } 
     } 
    } 
0

Вы должны иметь функцию или код для чтения всех значений в массиве и сделать проверку с помощью SSID и SecurityMode, есть не родная функция для проверки существует в массиве для определенного пользователя объектов.

Generic функция:

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 
1

как указано 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 
} 
1

Вы можете использовать объект или Set (если ES6 дееспособными), чтобы следить за то, что вы уже добавили, а затем проверить, что набор в условном , Вы можете создать ключ для набора с комбинацией 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); 
    } 
}); 

См Mimicking sets in JavaScript? для Set polyfill.

+0

site.SSID & site.securityMode подходит неопределенный –

+0

@SRNayak - Я здесь! Если бы вы просто ПОКАЗАЛИ нас своим реальным JSON, тогда мы могли бы перестать гадать, какие поля в нем. Вы должны уметь адаптировать этот код к тому, что имена реальных объектов находятся в вашем тайном JSON, который вы отказываетесь показывать нам. Это покажет вам, как это сделать. Мы не можем читать ваши мысли об именах свойств, которые вы не показываете. Возьмите этот код и адаптируйте его в соответствии с вашим фактическим JSON. Я трижды просил вас показать нам ваш настоящий JSON, и вы отказываетесь. Я прошу вас снова и снова и снова. – jfriend00

+0

Я понимаю слово ур. но проблема в том, что я отправил код выше, я хочу только в этом коде. Не нужно ничего менять, только нужно дать условие. Потому что код, который я не могу изменить без разрешения. –

Смежные вопросы