Сравнение строк JavaScript/JQuery не работает или, по крайней мере, не так, как я думаю, что это должно быть?

У меня есть 2-2D массивы, «item» и «data2». data2 — это очень большой массив, который содержит ~22k элементов, каждый из которых имеет второй элемент(id[0] и name[1]), где as элемент-переменная длина с 9 элементами каждый. Я пытаюсь фильтровать через два массива, чтобы сопоставить данные[1] элементу[0], которые оба содержат имя элемента.

Я пробовал jQuery.inArray (), который я никогда не использовал раньше, поэтому я не уверен, что он будет работать для суб-массивов:

for(var i = 0; i < item.length; i++){
        console.log(jQuery.inArray( item[i][0].text, data2 ));
}

и затем каждый способ, которым я мог бы найти или подумать о том, чтобы сделать нормальное сравнение строк:

for(var i = 0; i < item.length; i++){
        for(var k = 0; k < data2.length; k++){
            if(String(item[i][0].val) == String(data2[k][1].val){
                item[i][6] = data2[k][1];
            }else{

            }
        }
    }

Я нахожусь во многом, почему он не будет сравнивать данные. Я также использовал .текст вместо того, что я некоторые какие новые для JS JQuery так что не уверен, какой из них я должен использовать

Матрица:

пункт:

[0][0]"Armor Thermal Hardener II"
   [1]""
   [2]"Armor Hardener"
   [3]""
   [4]"Low"
   [5]"5 m3"
[1][0]"Armor Kinetic Hardener II"
   [1]""
   [2]"Armor Hardener"
   [3]""
   [4]"Low"
   [5]"5 m3"
[2][0]"Armor EM Hardener II"
   [1]""
   [2]"Armor Hardener"
   [3]""
   [4]"Low"
   [5]"5 m3"

данные:

[0][0]"599"
   [1]"Armor Thermal Hardener II"
[1][0]"600"
   [1]"Armor Kinetic Hardener II"
[2][0]"601"
   [1]"Armor EM Hardener II"

1 ответ

  1. Для того, что я понял, вам было бы лучше использовать .фильтр; кроме того, я не уверен, что строковый конструктор идеален, так как он вернет строковый объект, который я не уверен, будет ли выполнять сравнение, как ожидалось; кроме того, если data2 настолько велик, я бы поставил его итератор сверху; попробуйте что-то вроде этого вместо этого:

    for ( var i = 0; i < data2.length; i++ ){
        var it = item.filter(function(el){ return el[0] == data2[i][1]; });
        if (it.length){ //exists
            it[6] = data2[i][1];
        }
    }
    

    Однако я не знаю, что вы делаете, используя data2[k] [1].val на строке; кроме того, не имеет большого смысла для меня, чтобы проверить, если data2[k][1] то же самое, что пункт[i][0], а затем назначить то же значение; Возможно, вы могли бы объяснить, что делает .значение означает, и я мог бы расширить свой ответ