var binary = [1,0,0,1,1,1,0,0,1,0];У меня есть функция, которая производит случайный массив бит. Я хотел бы объединить совпадающие элементы и вернуть массив, в котором указано, сколько элементов было повторено. Вышеупомянутое дает результат = [1,2,3,2,1,1].
Есть ли в JavaScript какие-нибудь функции, которые позволили бы мне это сделать? Я пробовал искать, но не совсем уверен, как описать то, что хочу. Спасибо.
в качестве примечания, оба массива могут быть легко сгенерированы в одном цикле



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Вы можете использовать метод 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.info(result)Попробуйте следовать
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.info(result);Вы можете проверить последний элемент при уменьшении массива и либо нажать увеличенное последнее значение, либо взять 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.info(result);это способ, который я нашел, чтобы проверить, что двоичный файл в массиве постоянно повторяется или нет
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.info(result)
вот результат [1, 2, 3, 2, 1, 1] и этот код прост для понимания
Опишите свое решение. Сообщение только с кодом не завершено
сначала он соответствует первому символу массива со вторым, если он сопоставлен, тогда счетчик увеличится на 1 (в нашем случае он не сопоставлен), если не сопоставлен счетчик push, чтобы результат, который изначально был пуст, и присвоить счетчику 1 (почему счетчик 1? Потому что если нет совпадений, то есть хотя бы один символ)
@alamoot Иногда я соглашусь; в этом случае, поскольку это явно уже домашнее задание, добавление объяснения делает ответ даже худший, потому что оно снимает даже более бремени OP с фактического учить.
@ Дэйв, это личный проект, а не домашнее задание. Четко.
@ В будущем я понимаю. Лично я бы потратил на это больше времени, прежде чем сдаться, и также включил бы ваши лучшие усилия в вопрос, но это только я. И это очень странный «личный проект», но у меня есть и более странные, так что кто я такой, чтобы судить.
Немного короче и медленнее:
console.info( [1,0,0,1,1,1,0,0,1,0].join('').match(/0+|1+/g).map(m => m.length) )
Итерировать и считать? Я имею в виду, что это базовый RLE без ссылки на то, что вы кодируете, верно?