Je cherche un moyen facile de supprimer une valeur en double d'un tableau. J'ai découvert comment détecter s'il y avait un doublon ou non, mais je ne sais pas comment le "pousser" depuis la valeur. Par exemple, si vous allez sur le lien fourni et que vous tapez ensuite "abca" (appuyez sur la touche retour/entrée après chaque lettre) .. le message "dupliquer!"
Mais je veux aussi comprendre comment supprimer ce doublon de la zone de texte?
C'est la partie qui semble ne pas fonctionner:
sort = sort.Push(i);
textVal = sort;
return textVal;
Pourquoi le faire à la dure, cela peut être fait plus facilement en utilisant la fonction de filtre javascript qui est spécifiquement destinée à ce type d'opération:
var arr = ["Apple", "bannana", "orange", "Apple", "orange"];
arr = arr.filter( function( item, index, inputArray ) {
return inputArray.indexOf(item) == index;
});
---------------------
Output: ["Apple", "bannana", "orange"]
Basé sur la solution user2668376, ceci renverra un nouveau tableau sans doublons.
Array.prototype.removeDuplicates = function () {
return this.filter(function (item, index, self) {
return self.indexOf(item) == index;
});
};
Après cela, vous pouvez faire:
[1, 3, 3, 7].removeDuplicates();
Le résultat sera; [1, 3, 7]
.
Voici les fonctions que j'ai créées/utilisées pour supprimer les doublons:
var removeDuplicatesInPlace = function (arr) {
var i, j, cur, found;
for (i = arr.length - 1; i >= 0; i--) {
cur = arr[i];
found = false;
for (j = i - 1; !found && j >= 0; j--) {
if (cur === arr[j]) {
if (i !== j) {
arr.splice(i, 1);
}
found = true;
}
}
}
return arr;
};
var removeDuplicatesGetCopy = function (arr) {
var ret, len, i, j, cur, found;
ret = [];
len = arr.length;
for (i = 0; i < len; i++) {
cur = arr[i];
found = false;
for (j = 0; !found && (j < len); j++) {
if (cur === arr[j]) {
if (i === j) {
ret.Push(cur);
}
found = true;
}
}
}
return ret;
};
Donc, en utilisant le premier, voici à quoi pourrait ressembler votre code:
function cleanUp() {
var text = document.getElementById("fld"),
textVal = text.value,
array;
textVal = textVal.replace(/\r/g, " ");
array = textVal.split(/\n/g);
text.value = removeDuplicatesInPlace(array).join("\n");
}
Vous pouvez utiliser Array.reduce()
pour supprimer les doublons. Vous avez besoin d'un objet d'assistance pour savoir combien de fois un élément a été vu.
function cleanUp()
{
var textBox = document.getElementById("fld"),
array = textBox.value.split(/\r?\n/g),
o = {},
output;
output = array.reduce(function(prev, current) {
var key = '$' + current;
// have we seen this value before?
if (o[key] === void 0) {
prev.Push(current);
o[key] = true;
}
return prev;
}, []);
// write back the result
textBox.value = output.join("\n");
}
La sortie de l'étape reduce()
peut être utilisée directement pour remplir à nouveau la zone de texte, sans affecter l'ordre de tri d'origine.
Vous pouvez le faire facilement avec juste un objet:
function removeDuplicates(text) {
var seen = {};
var result = '';
for (var i = 0; i < text.length; i++) {
var char = text.charAt(i);
if (char in seen) {
continue;
} else {
seen[char] = true;
result += char;
}
}
return result;
}
function cleanUp() {
var elem = document.getElementById("fld");
elem.value = removeDuplicates(elem.value);
}
arr3 = [1, 2, 3, 2, 4, 5];
unique = [];
function findUnique(val)
{
status = '0';
unique.forEach(function(itm){
if(itm==val)
{
status=1;
}
})
return status;
}
arr3.forEach(function(itm){
rtn = findUnique(itm);
if(rtn==0)
unique.Push(itm);
});
console.log(unique); // [1, 2, 3, 4, 5]