JavaScript,组合数组中的匹配元素

时间:2018-06-09 16:33:52

标签: javascript arrays



var binary = [1,0,0,1,1,1,0,0,1,0];




我有一个产生随机位数组的函数。我想组合匹配元素并返回一个数组,说明重复了多少元素。上面给出的输出= [1,2,3,2,1,1]。

JavaScript中是否有任何功能可以让我这样做?我试过搜索但不确定如何描述我想要的东西。感谢。

5 个答案:

答案 0 :(得分:2)

您可以使用reduce()方法并将最后一个元素存储在一个变量中。



var binary = [1, 0, 0, 1, 1, 1, 0, 0, 1, 0];
let last = null;

var result = binary.reduce((r, e) => {
  if (last == null || last != e) r.push(1);
  else r[r.length - 1]++;
  last = e;
  return r;
}, [])

console.log(result)




答案 1 :(得分:1)

尝试以下



var binary = [1,0,0,1,1,1,0,0,1,0];

var result = []; // result array
var value = binary[0]; // initial value
var counter = 1; // counter of the values
// Start the loop with 2nd value
for (var i = 1; i < binary.length; i++) {
  // if the value in array is same as stored value, increment counter
  if(value === binary[i]) {
    counter++;
  } else {
  /* if the value is different, push the counter in result 
  ** and reset value and counter */
    result.push(counter);
    value = binary[i];
    counter = 1;
  }
}

console.log(result);
&#13;
&#13;
&#13;

答案 2 :(得分:1)

您可以在减少数组的同时检查最后一个元素,然后按下增加的最后一个值或使用1进行连接。

var binary = [1, 0, 0, 1, 1, 1, 0, 0, 1, 0],
    result = binary.reduce((r, v, i, a) => r.concat((a[i - 1] === v && r.pop()) + 1), []);

console.log(result);

答案 3 :(得分:0)

这是我创建的方式来检查数组中的二进制是否连续重复

    var output = [1,0,0,1,1,1,0,0,1,0];
    var result = []
    var counter = 1;
    for(i=0;i<output.length;i++){
        if(output[i] === output[i+1])
            counter++;
        else{
            result.push(counter);
            counter=1;
            }
     }
     console.log(result)

这是一个输出[1,2,3,2,1,1] 这段代码很容易理解

答案 4 :(得分:0)

更短更慢的选择:

&#13;
&#13;
console.log( [1,0,0,1,1,1,0,0,1,0].join('').match(/0+|1+/g).map(m => m.length) )
&#13;
&#13;
&#13;