Jquery根据部分匹配

时间:2016-08-23 13:03:56

标签: javascript jquery arrays

我的数组看起来像这样: “MODE:ID:A:B”

["add:123456789:0:0", "del:99887766:0:0", "edit:1471872633890:8845:0", "add:4875125862:1523:NE"]

当用户从表中删除行时,del条目将添加到数组中。

如果用户在表中添加了新条目,则会向该阵列添加add条目。

如果用户编辑了一个条目,则会向该阵列添加edit条目。

我遇到的问题是,如果用户添加然后删除同一行,我最终会输入两个条目:

["add:123456789:0:0", "del:123456789:0:0"]

如何让del覆盖与ID匹配的添加(和/或)编辑条目?

我试过了:

    rows = rows.map(function(value) {
    if( value.indexOf(id) > -1 ) {
        return false;
    }

    return value;
    });

但只是用'false'替换该条目,它不会删除它。

知道我该怎么做吗?

由于

4 个答案:

答案 0 :(得分:1)

jQuery.map将按预期工作。 undefined返回值不会被映射。

null

jQuery map回调函数可以返回:

  • 已翻译的值,将映射到结果数组
  • null或undefined,删除项目
  • 一组值,将会 被夷为平地

答案 1 :(得分:0)

您可以迭代数组并拆分一个项目以进行检查并更新并重新组合该项目,以便为该元素提供辅助。

此提案只需要一个具有给定id的项目。

var data = ["add:123456789:0:0", "del:99887766:0:0", "edit:1471872633890:8845:0", "add:4875125862:1523:NE"],
    id = '123456789';

data.some(function (a, i, aa) {
    var item = a.split(':')
    if (item[1] === id) {
        item[0] = "del";
        aa[i] = item.join(':');
        return true;
    }
});

console.log(data);

答案 2 :(得分:0)

您最后可以添加一个过滤器:

rows = rows.map(function(value) {
    if( value.indexOf(id) > -1 ) {
        return false;
    }
    return value;
    })
.filter( function(item) {return item;});

答案 3 :(得分:0)

尝试使用此

rows = $.map(rows, function(value){
    if(value.indexOf(id) > -1){
        return 'del:' + id;
    }
}