2017-11-10 9 views
4

私は配列を持っている側重複している文字列に並べて削除します。JSの配列は、例えば、

var arr = ['ab', 'cd', 'cd', 'ef', 'cd']; 

は今、私は重複を削除したい横並びはそれがインデックス1 & 2(CD)であります。この例では、あります。

結果がでなければなりません:

var arr = ['ab', 'cd', 'ef', 'cd']; 

私はこのコードを試してみましたが、それは働いていない:

var uniqueNames = []; 
$.each(arr, function(i, el){ 
    if($.inArray(el, uniqueNames) === -1) uniqueNames.push(el); 
}); 

が、これはユニークなフィルタと、私はこれを望んでいません。

+0

'[ 'AB'、 'C​​D' の場合に何が起こります、 'cd'、 'cd'、 'ef'、 'cd'] '..? – Redu

答えて

5

後継者を確認して配列をフィルタすることができます。この

var arr = ['ab', 'cd', 'cd', 'ef', 'cd']; 
 
var uniqueNames = []; 
 
$.each(arr, function(i, el){ 
 
    if(el != uniqueNames[i-1]) uniqueNames.push(el); 
 
}); 
 
console.log(uniqueNames);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

2

一つの方法 - 隣人の重複を継ぎます。あなたが元の配列に突然変異を起こさないように気をつけてください。 spliceを使用すると、配列の長さが明らかに減少します。なぜなら、配列の終わりから最初まで作業する方が簡単な理由です。

let arr = ['ab', 'cd', 'cd', 'ef', 'cd']; 
 

 
for (let i = arr.length - 1; i >= 0; i--) { 
 
    if (arr[i-1] === arr[i]) arr.splice(i, 1); 
 
} 
 

 
console.log(arr);

2

単純な逆ループを行うための

var array = ['ab', 'cd', 'cd', 'ef', 'cd'], 
 
    result = array.filter((a, i, aa) => a !== aa[i + 1]); 
 
    
 
console.log(result);

2

単に最後の要素を追跡する、配列を反復します。

var data = ["ab", "cd", "cd", "ef", "cd"]; 
 
var result = [data[0]]; 
 
var last = data[0]; 
 
for (var i = 1, len = data.length; i < len; i++) { 
 
    if (data[i] !== last) { 
 
    result.push(data[i]); 
 
    last = data[i]; 
 
    } 
 
} 
 
console.log(result);

2
let uniqueNames = []; 
let arr = ['ab', 'cd', 'cd', 'ef', 'cd']; 

arr.forEach((element) => { 
    if(element !== uniqueNames.slice(-1).pop()) { 
     uniqueNames.push(element); 
    } 
}); 
1

拡張例とショートString.replace()アプローチ:

var arr = ['ab', 'cd', 'cd', 'cd', 'ef', 'ef', 'cd', 'cd'], 
 
    result = arr.join(',').replace(/(\S+)(,\1)+/g, '$1').split(','); 
 
\t 
 
console.log(result);

+0

@JamesThorpe、すべての余分のケースはあらかじめ言及する必要があります。現在の入力に対して機能します。セパレータは変更でき、問題はありません – RomanPerekhrest

関連する問題