到目前为止我做了什么:
var input = [1, 1, 3, 3, 3, 5, 5, 5, 9, 9, 9, 9];
var output = [];
/*input.forEach(function(element){ // works as intended, but I know we can do better :)
if(output.indexOf(element) == -1)
output.push(element);
});*/
output.push(input[0]); // first element is always unique!
for(var i=1; i<input.length; i++){ // check rest of the elements
if(input[i] != output[i-1])
output.push(input[i]);
}
console.log(output);
您可能已经注意到,我的逻辑是检查i+1th
的{{1}}元素是否等于input
的{{1}}元素,如果不是,请添加它到ith
但是,这段代码不起作用。它输出:output
。
我错过了什么?
答案 0 :(得分:4)
输出尺寸并不总是在增加...... 它应该是......
if(input[i]!=output[output.length-1])
答案 1 :(得分:4)
如果您将input[i]
与input[i-1]
进行比较,这会更容易,例如:
output.push(input[0]); // first element is always unique!
for(var i=1; i<input.length; i++){ // check rest of the elements
if(input[i] != input[i-1]) // NOTE: changed output to input
output.push(input[i]);
}
这通常是如何完成的,因为通常您无法访问输出(例如,它被传递以进行进一步处理而不是存储在数组中)。
答案 2 :(得分:3)
查看其中的最后一项时,您需要使用output
的长度:
if(input[i] != output[output.length-1])
答案 3 :(得分:0)
您可以通过indexOf值 -
过滤项目来返回每个值的第一项这样做的好处是不需要对列表进行排序。
var input = [5,9,5,3,9,3,5,1,3,9,9,1];
var output =input.filter(function(itm,i, A){
return A.indexOf(itm)==i;
});
output.sort()
/* returned value: (Array)
1,3,5,9
*/