我从socket接收了一堆流,并希望将重复的流合并到一个流中(或选择第一个项)
总之,我想通过rxjs执行此操作:
In: 1 - 1 - 1 - 2 - 2 - 3 - 3 - 1 - 1 - 1 - 2 - 2 - 2 - 1 - 2 - 2 - 3 - 3
Out: 1 - - - - - 2 - - - 3 - - - 1 - - - - - 2 - - - - - 1 - 2 - - - 3 - -
答案 0 :(得分:3)
distinctUntilChanged完全符合您的需要。
答案 1 :(得分:0)
你可以试试这个
var arr = [1,1,1,2,2,3,3,1,1,1,2,2,2,2,1,2,2,3,3];
for (i = 1; i < arr.length; i++) {
if (arr[i]==arr[i-1]){ arr.splice(i,1);i--;}
}
OUT:[1, 2, 3, 1, 2, 1, 2, 3]
答案 2 :(得分:0)
以下是使用Array.fitler()
函数的方法:
[1,1,1,2,2,3,3,1,1,1,2,2,2,2,1,2,2,3,3].filter((value, index, src) => {
if(index === 0) {
//The first element of the array is always included
return true;
}
// Return true (keep) if the current element `value` is different
// than the element that was last encountered (`src[index-1]`)
return src[index-1] !== value;
});
输出到:
[ 1, 2, 3, 1, 2, 1, 2, 3 ]
这是通过迭代数组并检查每个元素是否与它之前的on相同或不同来实现的。这是同样的事情,但作为一个班轮:
[1,1,1,2,2,3,3,1,1,1,2,2,2,2,1,2,2,3,3].filter((value, index, src) => {
return index === 0 || src[index-1] !== value;
});