簡體   English   中英

使用轉發器值Javascript最小化數組

[英]Minimize an array with repeaters values Javascript

我正在嘗試用JavaScript做一些有趣的事情,但我做不到。 這是我的意見:

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

所以我的輸出是只獲得不同的值並進入一個新的向量。

 var Output = SomeFunction(Input);

這就是我要的:

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

Y嘗試了這個,但不工作,以及:

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;
}

你可以使用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)); 

試試這樣吧

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. 使用join將數組轉換為字符串,以便可以在其上使用正則表達式
  2. 使用反向引用正則表達式刪除帶有replace()的連續元素
  3. 使用split將字符串轉換回數組

(\\w)\\1*解釋

 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>'); 

你可以像這樣做一個過濾器

 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> 

 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); 

這個怎么樣:

 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) 

示例使用數組過濾器。

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

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

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;
}

為我工作:

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;
}

小心變量“輸入”的名稱。 它不是“輸入”,而是“輸入”。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM