【问题标题】:Remove a string from string array从字符串数组中删除一个字符串
【发布时间】:2013-03-02 20:59:38
【问题描述】:

我是 JavaScript 的初学者。

我有一个这样的字符串数组:123,432,123,543,123,123

我想从这个字符串中删除 3dr 编号。

我发现以下函数可以从字符串数组中删除文本值,但它不适用于其中包含重复值的数组。

Array.prototype.removeByValue = function (val) {

    for (var i = 0; i < this.length; i++) {
        if (this[i] == val) {
            this.splice(i, 1);
            break;
        }
    }
} 

感谢任何解决此问题的建议。

【问题讨论】:

  • 大概你有一个这样的数组:[123, 432, 123, 543, 123, 123]。你只想删除第三个元素,不管它是什么?
  • @lonesomeday,这很重要。

标签: javascript arrays splice array-splice


【解决方案1】:

你可以使用过滤器:

var ary = ['three', 'seven', 'eleven'];

ary = ary.filter(function(v) {
    return v !== 'seven';
});

并扩展你的数组

Array.prototype.remove = function(value) {
    return ary.filter(function(v) {
        return v != value;
    });

}

var ary = ['three', 'seven', 'eleven'];
ary = ary.remove('seven'),
console.log(ary)

【讨论】:

  • 但这不是就地的,任何其他引用仍然指向带有"three seven eleven"的数组
【解决方案2】:

那就继续吧:

Array.prototype.removeByValue = function (val) {

    for (var i = 0; i < this.length; i++) {
        if (this[i] == val) {
            this.splice(i, 1); 
            i--; //Decrement after removing
            //No break
        }
    }
} 

更惯用的方式是this.splice(i--, 1),但这应该更清楚它们发生的顺序。

var a = [1,2,1,1,2,2];
a.removeByValue(1);
a; //[2, 2, 2]

【讨论】:

    【解决方案3】:

    为了解决这个问题,我为每个元素添加了一个唯一的 ID,例如 {A1;123,A2;432,A3;123,A4;543,A5;123,A6;123}使用相同功能的元素更容易。

    【讨论】:

    • 如果你这样做,它不是一个数组,它是一个对象!
    • 它的数组,@silly!!!你的元素中有什么角色重要吗? @傻
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-12
    • 1970-01-01
    • 2023-03-14
    • 1970-01-01
    • 2020-05-18
    相关资源
    最近更新 更多