如何替换数组元素

时间:2016-05-19 15:34:49

标签: javascript

我想将一个新方法附加到Array.prototype:

Array.prototype.uniq = function(){
  return this.filter((val, index) => {
    return this.indexOf(val) === index;
  });
};

var a = [1, 1, 2, 3];
console.log(a.uniq()); // output: [1,2,3]
console.log(a); // output: [1,1,2,3]

该方法从数组中删除重复项。我遇到的问题是,每当调用uniq时,都会返回一个新数组。我想做这样的事情:

Array.prototype.uniq = function(){
  this = this.filter((val, index) => {  // "ReferenceError: Invalid left-hand side in assignment
    return this.indexOf(val) === index;
  });
};

这样:

var a = [1, 1, 2, 3];
a.uniq();
console.log(a); // output: [1,2,3]

我该怎么办?

1 个答案:

答案 0 :(得分:4)

您可以使用for循环遍历数组,如果索引不相同,则使用splice

Array.prototype.uniq = function () {
    // Reverse iterate
    for (var i = this.length - 1; i >= 0; i--) {

        // If duplicate
        if (this.indexOf(this[i]) !== i) {
            // Remove from array
            this.splice(i, 1);
        }
    }

    // Return updated array
    return this;
};

var a = [1, 1, 2, 3];
a.uniq();
console.log(a); // output: [1,2,3]