使用转发器值Javascript最小化数组

时间:2015-10-14 08:45:04

标签: javascript arrays

我正在尝试用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;
}

9 个答案:

答案 0 :(得分: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));

答案 1 :(得分: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]);     

答案 2 :(得分:2)

您可以使用反向引用正则表达式

  1. 使用join将数组转换为字符串,以便可以在其上使用正则表达式
  2. 使用反向引用正则表达式删除带有replace()
  3. 的连续元素
  4. 使用split
  5. 将字符串转换回数组

    (\w)\1* Explanation

    &#13;
    &#13;
    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>');
    &#13;
    &#13;
    &#13;

答案 3 :(得分: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>

答案 4 :(得分: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);

答案 5 :(得分: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)

答案 6 :(得分:1)

使用数组过滤器的示例。

只要数组不是太大而且可以很容易地扩展以比较对象数组中的某些属性,那么非常简单。对于一个更大的数组,它可能会更快,而不是像其他一些答案那样进行for循环。

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

答案 7 :(得分: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;
}

答案 8 :(得分: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;
}

小心变量&#34;输入&#34;的名称。它不是&#34;输入&#34;,它&#34;输入&#34;。