繁体   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