I have the following script, which filter duplicates and return only unique values for an array. When passing `false` or nothing the "original" array is being overwritten, when passing `true` a new array is create with unique value and returned instead. Script should work only with numbers and strings. I would like to know: - If it is possible to optimize the code for maximum performance and how, - If is possible to improve or write in alternative way logic for `createArray`, maybe a better way in term of code repetition. https://jsfiddle.net/dj7qxyL7/ Array.prototype.getUnique = function (createArray) { createArray = createArray === true ? true : false; var temp = JSON.stringify(this); temp = JSON.parse(temp); if (createArray) { var unique = temp.filter(function (elem, pos) { return temp.indexOf(elem) == pos; }.bind(this)); return unique; } else { var unique = this.filter(function (elem, pos) { return this.indexOf(elem) == pos; }.bind(this)); this.length = 0; this.splice(0, 0, unique); } } var duplicates = [0, 0, 1, 1, 2, 3, 1, 1, 0, 4, 4]; console.log('++++ ovveride') duplicates.getUnique(); console.log(duplicates); console.log('++++ new array') var duplicates2 = [0, 0, 1, 1, 2, 3, 1, 1, 0, 4, 4]; var unique = duplicates2.getUnique(true); console.log(unique); console.log('++++ original') console.log(duplicates2);