2015-10-14 61 views
3

我想在JavaScript中做一些有趣的事情,但我不能,所以我在這裏嘗試獲得一些幫助。這是我輸入:使用repectors值最小化數組Javascript

var Input = ['a','a','a','b','b','b','b','c','c','c','a','a','c','d','d','d']; 

所以我的輸出是隻得到diferents值去一個新的載體。

var Output = SomeFunction(Input); 

這是要我要:

Output = ['a','b','c','a','c','d']; 

Ÿ試圖與這一點,但不藏漢工作:

function SomeFunction(input){ 
var out= []; 
for (var i = 0; i < input.length - 1; i++) { 
    if(input[i] == input[i+1]){ 
    out.push(input[i]);  
    } 
} 
return out; 
} 
+1

我認爲它應該是'if(input [i]!= input [i + 1])'並分別檢查最後一個元素。 – Passerby

+1

如果你只想要唯一的值你可以嘗試這個http://stackoverflow.com/questions/1960473/unique-values-in-an-array –

+0

是輸入一個數組或字符串,並且你已經轉換了字符串數組? – Tushar

回答

5

您可以使用filter()

var input = ['a', 'a', 'a', 'b', 'b', 'b', 'b', 'c', 'c', 'c', 'a', 'a', 'c', 'd', 'd', 'd']; 
 

 

 
input = input.filter(function(v, i, arr) { 
 
    return arr[i - 1] !== v; 
 
    //compare with the previous value 
 
}) 
 

 
document.write(JSON.stringify(input));

2

嘗試這樣

var out= []; 
var i = 0; 
for (i = 0; i < input.length - 1; i++) { 
    if(input[i] != input[i+1]){ 
    out.push(input[i]);  
    } 
} 
if (out[out.length-1] !== input[i]) 
    out.push(input[i]);  
+1

如果還需要推送最後一個項目,則不起作用。 – Amit

+0

@Amit更新:) –

1

var Input = ['a','a','a','b','b','b','b','c','c','c','a','a','c','d','d','d']; 
 
var Output = SomeFunction(Input); 
 
function SomeFunction(input){ 
 
var out= []; 
 
for (var i = 1; i < input.length; i++) { 
 
    if(input[i] != input[i-1]){ 
 
    out.push(input[i-1]);  
 
    } 
 
} 
 

 
out.push(input[input.length - 1]); 
 
return out; 
 
} 
 

 
alert(Output);

2

您可以通過使用join使用逆向引用正則表達式

  1. 數組轉換爲字符串,從而使正則表達式可以在其上使用
  2. 使用逆向引用的正則表達式使用split

(\w)\1* Explanation

var input = ['a', 'a', 'a', 'b', 'b', 'b', 'b', 'c', 'c', 'c', 'a', 'a', 'c', 'd', 'd', 'd']; 
 
var str = input.join(''); 
 

 
input = str.replace(/(\w)\1*/g, '$1').split(''); 
 

 
console.log(input); 
 
document.write('<pre>' + JSON.stringify(input, 0, 2) + '</pre>');

移除與替換)連續元素(
  • 轉換回的字符串數組
  • 2

    你可以做一個像

    var Input = ['a', 'a', 'a', 'b', 'b', 'b', 'b', 'c', 'c', 'c', 'a', 'a', 'c', 'd', 'd', 'd', 'e']; 
     
    
     
    var Output = SomeFunction(Input); 
     
    
     
    function SomeFunction(input) { 
     
        var out = input.filter(function(value, i) { 
     
        return value !== input[i + 1] 
     
        }); 
     
        return out; 
     
    } 
     
    
     
    output.innerHTML = JSON.stringify(Output)
    <pre id="output"><pre>

    1

    這樣如何:使用陣列濾光器

    var Input = ['a', 'a', 'a', 'b', 'b', 'b', 'b', 'c', 'c', 'c', 'a', 'a', 'c', 'd', 'd', 'd']; 
     
    
     
    function SomeFunction(input) { 
     
        var out = []; 
     
        var initStr = input[0]; 
     
        console.log(initStr) 
     
        for (var i = 1; i < input.length; i++) { 
     
        if (input[i] === initStr) { 
     
    
     
    
     
        } else { 
     
         out.push(input[i - 1]); 
     
         initStr = input[i]; 
     
        } 
     
        } 
     
        out.push(input[i - 1]); 
     
        console.log(out); 
     
    } 
     
    
     
    SomeFunction(Input)

    1

    實施例。

    很簡單,只要數組不太大,並且可以很容易地擴展以比較對象數組中的某些屬性。對於一個更大的數組,它可能會更快,但是要做一個for循環,而不是其他一些答案。

    var Input = ['a', 'b', 'c','a', 'b', 'a', 'b', 'c','c'] 
     
    var Output = Input.filter(function(value,index) { return Input[index - 1] != value; });

    1
    function SomeFunction(input) { 
    var out= []; 
        out.push(input[i]);   
        for (var i = 0; i < input.length - 1; i++) { 
         if(input[i] !== out[out.length-1]){ 
         out.push(input[i]);   
         } 
        } 
        return out; 
    } 
    
    1

    爲我工作:

    function SomeFunction(input){ 
    var out= []; 
    for (var i = 0; i < input.length; i++) { 
        if(input[i] !== input[i+1]){ 
        out.push(input[i]);  
        } 
    } 
    return out; 
    } 
    

    小心與varible 「輸入」 的名稱。這不是「輸入」,而是「輸入」。