重複した値を配列から削除する簡単な方法を探しています。重複があるかどうかを検出する方法を見つけました。値からそれを「プッシュ」する方法がわかりません。たとえば、提供されているリンクに移動して、「abca」と入力すると(各文字の後にReturnキーを押します).. "duplicate!"を警告します
しかし、私はテキストエリアからその重複を削除する方法を見つけたいですか?
これは機能していないと思われる部分です::
sort = sort.Push(i);
textVal = sort;
return textVal;
なぜ難しいのか、この種の操作専用のjavascriptフィルター関数を使用して簡単に行うことができます。
var arr = ["Apple", "bannana", "orange", "Apple", "orange"];
arr = arr.filter( function( item, index, inputArray ) {
return inputArray.indexOf(item) == index;
});
---------------------
Output: ["Apple", "bannana", "orange"]
User2668376ソリューションに基づいて、これは重複のない新しい配列を返します。
Array.prototype.removeDuplicates = function () {
return this.filter(function (item, index, self) {
return self.indexOf(item) == index;
});
};
その後、次のことができます。
[1, 3, 3, 7].removeDuplicates();
結果は次のようになります。 [1, 3, 7]
。
これらは、重複を削除するために作成/使用した関数です。
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;
};
最初のコードを使用すると、コードは次のようになります。
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");
}
Array.reduce()
を使用して、重複を削除できます。アイテムが表示された回数を追跡するには、ヘルパーオブジェクトが必要です。
_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");
}
_
reduce()
ステップの出力を直接使用して、元のソート順に影響を与えることなく、テキスト領域に再度データを入力できます。
これはオブジェクトだけで簡単に行えます:
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]