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

我有一个产生随机位数组的函数。我想组合匹配元素并返回一个数组,说明重复了多少元素。上面给出的输出= [1,2,3,2,1,1]。
JavaScript中是否有任何功能可以让我这样做?我试过搜索但不确定如何描述我想要的东西。感谢。
答案 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;
答案 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)
更短更慢的选择:
console.log( [1,0,0,1,1,1,0,0,1,0].join('').match(/0+|1+/g).map(m => m.length) )
&#13;