从两个表中删除值

时间:2014-11-21 15:39:39

标签: javascript angularjs

我有两个表是我删除了两个表中的值,如果在一个表中的值被标记为false

this.notInModel = function (tab1, tab2) {
    for (var i = 0; i <= tab1.length - 1; i++) {
        if (!tab1[i].inModel) {
            for (var j = 0; j <= tab2.length - 1; j++) {
                if(tab1[i].name === tab2[j].name)
                    tab2.splice(j, 1);
            }
        }
    }
    for (var i = 0; i <= tab2.length - 1; i++) {
        if (!tab2[i].inModel) {
            for (var j = 0; j <= tab1.length - 1; j++) {
                if(tab2[i].name === tab1[j].name)
                    tab1.splice(j, 1);
            }
        }
    }
}

我认为我的卷发有点重复,想知道​​我们是否无法重构代码..?

谢谢。

3 个答案:

答案 0 :(得分:1)

您可以通过创建一个新函数来迭代遍历数组,使其更加模块化:

this.notInModel = function (tab1, tab2) {
  function nim(t1,t2) {
    for (var i = 1; i <= t1.length - 1; i++) {
        if (!t1[i].inModel) {
            for (var j = 1; j <= t2.length - 1; j++) {
                if(t1[i].name === t2[j].name)
                    t2.splice(j, 1);
            }
        }
    }
  }
  nim(tab1,tab2);
  nim(tab2,tab1);
}

答案 1 :(得分:1)

试试这个:

this.notInModel = function (tab1, tab2) {
    for (var i = tab1.length; i--; ) {
        for (var j = tab2.length; j--; ) {
            if(tab1[i].name !== tab2[j].name)
                continue;

            var tab2InModel = tab2[j].inModel;

            if(!tab1[i].inModel)
                tab2.splice(j, 1);

            if(!tab2InModel)
                tab1.splice(i, 1);
        }
    }
}

诀窍是以相反的顺序遍历两个选项卡,并检查每个元素组合的nameinModel属性。

<强> DEMO

答案 2 :(得分:0)

以下代码似乎是等效的,但如果没有splice的定义或不知道如何设置inModel字段,我就无法测试。

this.notInModel = function (tab1, tab2) {
    for (var i = 1; i <= tab1.length - 1; i++) {
        for (var j = 1; j <= tab2.length - 1; j++) {
            if(!tab1[i].inModel) {
                if (tab1[i].name === tab2[j].name)
                    tab2.splice(j, 1);
            }
            if(!tab2[j].inModel) {
                if (tab1[i].name === tab2[j].name)
                    tab1.splice(i, 1);
            }
        }
    }
}