JavaScript / JQuery字符串比较不起作用或者至少不是我认为应该的方式吗?

时间:2016-11-02 20:32:38

标签: javascript jquery arrays string string-comparison

我有2个2D阵列," item"和" data2"。 data2是一个非常大的数组,包含~22k项,每个项都有第二项(id [0]和name [1]),其中item是一个可变长度,每个项目有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{

            }
        }
    }

我很多为什么它不会比较数据。我也使用过.text而不是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 个答案:

答案 0 :(得分:0)

根据我的理解,你最好使用.filter;此外,我不确定String构造函数是否理想,因为它将返回一个String对象,我不确定是否会按预期执行比较;此外,如果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];
    }
}

但是,我不知道你假装在String上使用data2 [k] [1] .val。对于我来说,检查data2 [k] [1]是否与item [i] [0]相同然后分配相同的值也没有多大意义;也许你可以解释.value意味着什么,我可以扩展我的答案