【问题标题】:javascript, remove identical items from arrayjavascript,从数组中删除相同的项目
【发布时间】:2011-02-01 11:18:14
【问题描述】:

我在一个返回表单的灯箱脚本中执行 ajax 调用。

当表单被加载时,我调用var initial = $('form').serializeArray();

提交表单后,我致电var final = $('form').serializeArray();

这给了我两个对象数组, 我现在要做的是比较数组中的每个对象并删除那些没有改变的对象。

我该怎么做?

【问题讨论】:

    标签: javascript object serializearray


    【解决方案1】:

    我假设这两个数组的长度相等,并且元素在两个数组中的顺序相同。在这种情况下,您需要做的是查看第一个数组的每个元素,并将其与第二个数组的相应元素进行比较;如果它们匹配,则从两个数组中删除该位置的元素。

    这样的东西应该可以工作(虽然我还没有测试过):

    var i = 0;
    while (i < initial.length) {
        if(initial[i] == final[i]) {
            initial.splice(i,1);
            final.splice(i,1);
        }
        else {
            i++;
        }
    }
    

    【讨论】:

    • .splice() 是否对索引重新排序?即如果第 3 项相同,我会以 [object, object, undefined, object][object, object, object] 结束吗?
    • splice 有效地从数组中删除一个元素(如果没有指定其他元素,请参阅w3schools.com/jsref/jsref_splice.asp
    【解决方案2】:

    我认为最快的方法

    var len = initial.length, i=0, changed=[];
    /* I hope initial.length==final.length*/
    
        for(i; i<len; i++){
            /* 0== '' */
            if (initial[i]===final[i])
               changed[i] = final[i];
        }
    

    //现在玩

    改变了

    我对这个问题感到困惑

    .splice() 是否对索引重新排序?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-05-01
      • 2015-10-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-07-21
      • 2012-07-16
      • 1970-01-01
      相关资源
      最近更新 更多