【问题标题】:JavaScript/JQuery String comparison not working or at least not the way I think it should?JavaScript/JQuery 字符串比较不起作用,或者至少不是我认为的那样?
【发布时间】:2016-11-02 20:32:38
【问题描述】:

我有 2 - 2D 数组,“item”和“data2”。 data2 是一个非常大的数组,其中包含约 22k 个项目,每个项目都有第二个项目(id [0] 和 name [1]),其中 item 是可变长度,每个项目有 9 个项目。我正在尝试过滤这两个数组以将 data[1] 与 item[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"

【问题讨论】:

  • 您能否给我们一个您想要比较的阵列示例?一个包含 5-10 项数组的示例就足够了,只是为了更好地理解结构
  • 来自 jQuery (api.jquery.com/jQuery.inArray) 的文档确实提到了有关 2D 数组的任何内容。但是,由于您正在查看每个数组中的特定子元素(基于您的第二个示例),因此您已经以最好的方式做到了。
  • 一般说明 - jQuery 主要用于与 DOM 相关的操作。如果您必须在 JS 中处理原始数据分析,请查看 Lodash 等实用程序库
  • 样本数据正确吗?您的代码执行item[i][0].val,这表明您的数组包含对象,但您的示例数据仅显示字符串。
  • 我的印象是你必须使用 .val/.value 从我在谷歌上看到的数组中获取值,但这是数组的正确结构

标签: javascript jquery arrays string string-comparison


【解决方案1】:

据我了解,使用 .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 是什么意思,我可以扩展我的答案

【讨论】:

  • I´m not sure about String constructor is ideal, as it will return a String object 好吧,它并没有真正使用构造函数String(variable) 没有new 关键字将执行类型转换为原始字符串,而不是围绕原始字符串创建一个新的包装器。
  • 就像我提到的,我尝试了很多不同的方法来比较最后一个项目的两个项目。我还测试了您的代码,它会在任何匹配时返回。除非这是可能的,而且我不会尝试做一些不可能的事情,否则我可以使用 php
  • 正如我在回答中所说的那样,如果你能解释什么是 data2[k][1].val 和 item[i][0].val,这将非常有帮助,因为这两个不对我来说没有意义。
  • data2[k][1].val 是 ID 在 [0] 中的项目的名称(在上面的评论中,我被告知我不需要 .val 不知道this) 和 item[i][0] 是用户输入的项目的名称
猜你喜欢
  • 2014-06-23
  • 1970-01-01
  • 2012-07-03
  • 1970-01-01
  • 1970-01-01
  • 2011-09-20
  • 1970-01-01
  • 2014-04-03
相关资源
最近更新 更多