我有一个类似于var arr = [5, 5, 5, 2, 2, 2, 2, 2, 9, 4, 5, 5, 5];的数组,我非常希望输出是[5,2,9,4,5]。我的逻辑是:
newA = arr.slice(i, count)的操作。newA将类似于arr.slice(0, 3),newB将是arr.slice(3,5),依此类推。我试图将其转换为以下代码:
function identical(array){
var count = 0;
for(var i = 0; i < array.length -1; i++){
if(array[i] == array[i + 1]){
count++;
// temp = array.slice(i)
}else{
count == 0;
}
}
console.log(count);
}
identical(arr);我在解决如何输出一个表示数组中相同的元素组的元素时遇到了问题。如果元素不相同,则应该按照其在原始数组中的顺序输出。
发布于 2015-06-08 18:57:00
使用array.filter(),您可以检查每个元素是否与前面的元素相同。
就像这样:
var a = [5, 5, 5, 2, 2, 2, 2, 2, 9, 4, 5, 5, 5];
var b = a.filter(function(item, pos, arr){
// Always keep the 0th element as there is nothing before it
// Then check if each element is different than the one before it
return pos === 0 || item !== arr[pos-1];
});
document.getElementById('result').innerHTML = b.join(', ');<p id="result"></p>
发布于 2015-06-08 19:03:45
如果您完全按照算法进行查找,而不使用任何函数。
var arr = [5, 5, 5, 2, 2, 2, 2, 2, 9, 4, 5, 5, 5];
function identical(array){
var newArray = [];
newArray.push(array[0]);
for(var i = 0; i < array.length -1; i++) {
if(array[i] != array[i + 1]) {
newArray.push(array[i + 1]);
}
}
console.log(newArray);
}
identical(arr);小提琴;
发布于 2015-06-08 19:03:33
reduce的另一种方式
var arr = [5, 5, 5, 2, 2, 2, 2, 2, 9, 4, 5, 5, 5];
var result = arr.reduce(function(acc, cur) {
if (acc.prev !== cur) {
acc.result.push(cur);
acc.prev = cur;
}
return acc;
}, {
result: []
}).result;
document.getElementById('d').innerHTML = JSON.stringify(result);<div id="d"></div>
https://stackoverflow.com/questions/30716829
复制相似问题