Javascript 从数组的排序列表中提取唯一元素

Javascript 从数组的排序列表中提取唯一元素,javascript,algorithm,Javascript,Algorithm,到目前为止我所做的: 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); });*/ outp

到目前为止我所做的:

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);
var输入=[1,1,3,3,5,5,9,9,9];
var输出=[];
/*forEach(函数(元素){//按预期工作,但我知道我们可以做得更好:)
if(输出索引of(元素)=-1)
输出推送(元件);
});*/
output.push(输入[0]);//第一个元素总是唯一的!

对于(var i=1;i当查看其中的最后一项时,您需要使用
输出的长度:

if(input[i] != output[output.length-1])

查看其中的最后一项时,需要使用
输出的长度

if(input[i] != output[output.length-1])

输出大小并不总是在增加。。。 应该是

if(input[i]!=output[output.length-1])

输出大小并不总是在增加。。。 应该是

if(input[i]!=output[output.length-1])

如果将
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]);
}
output.push(输入[0]);//第一个元素总是唯一的!

对于(var i=1;i而言,如果将
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]);
}
output.push(输入[0]);//第一个元素总是唯一的!

对于(var i=1;i您可以通过按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
*/

通过按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
*/

是的,这将解决问题,如果您不想使用输出[output.length-1],您可以使用一个临时变量并在其中保存最后一个输出值,或者只需检查(输入[i]!=input[i-1]),因为它是一个排序列表。如果您不想使用输出[output.length-1],请使用单独的变量当你推动一个元素输出时,增加它。如果你不想使用输出[output.length-1],吉姆的答案是完美的。是的,这会解决问题。如果你不想使用输出[output.length-1],你可以使用一个临时变量并保存最后一个输出值,或者只是检查一下(输入[i]!=input[i-1])因为这是一个排序列表。如果不想使用输出[output.length-1],请使用单独的变量,并在每次按元素输出时递增。如果不想使用输出[output.length-1],jim的答案是完美的噢,JavaScript,在其他任何一种语言中,当您试图访问尚未编写的动态数组中的条目时,可能会出现异常。噢,JavaScript,在其他任何一种语言中,当您试图访问尚未编写的动态数组中的条目时,可能会出现异常。。