Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/434.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 为什么我的重复删除脚本不能捕获唯一值_Javascript - Fatal编程技术网

Javascript 为什么我的重复删除脚本不能捕获唯一值

Javascript 为什么我的重复删除脚本不能捕获唯一值,javascript,Javascript,我正在尝试从排序列表中删除重复项 我写了这个剧本 for(var i = 0; i < duplicateAuthors.length - 1; i++){ if(duplicateAuthors[i] == duplicateAuthors[i + 1]) { continue; } else{ uniqAuthors.push(duplicateAuthors[i]); } } for(var i=0;i

我正在尝试从排序列表中删除重复项

我写了这个剧本

for(var i = 0; i < duplicateAuthors.length - 1; i++){
        if(duplicateAuthors[i] == duplicateAuthors[i + 1]) { continue; } 
        else{
            uniqAuthors.push(duplicateAuthors[i]);
        }
}
for(var i=0;i
它可以工作,但不能捕获列表中的唯一值。我做错了什么?

var uniqAuthors=[];
var uniqAuthors = [];

for(var i = 0; i < duplicateAuthors.length; i++){
        if(uniqAuthors.indexOf(duplicateAuthors[i]) == -1) {
            uniqAuthors.push(duplicateAuthors[i]);
        }
}
对于(var i=0;i
上面的代码检查数组中是否存在对象,如果不存在,则将其添加到数组中。因此,最后我们将有一个唯一值数组。

var uniqAuthors=[];
var uniqs = {};
for(var i = 0; i < duplicateAuthors.length ; i++){
        uniqs[duplicateAuthors[i]] = null;
}
var uniqAuthors = Object.keys(uniqs);
对于(var i=0;i

上面的代码检查数组中是否存在对象,如果不存在,则将其添加到数组中。因此,最后我们将有一个唯一值数组。

这将利用它已经排序的事实

var previous;
var current;
for(var i = 0; i < duplicateAuthors.length; i++){
    current = duplicateAuthors[i];
    if (current && current != previous) {
        uniqAuthors.push(current);
        previous = current;
    }
}
var uniqs = {};
for(var i = 0; i < duplicateAuthors.length ; i++){
        uniqs[duplicateAuthors[i]] = null;
}
var uniqAuthors = Object.keys(uniqs);
var-previous;
无功电流;
对于(var i=0;i
这将利用已排序的事实

var previous;
var current;
for(var i = 0; i < duplicateAuthors.length; i++){
    current = duplicateAuthors[i];
    if (current && current != previous) {
        uniqAuthors.push(current);
        previous = current;
    }
}
var-previous;
无功电流;
对于(var i=0;i
由于对象键必须是唯一的,我意识到您也可以执行以下操作来隔离唯一值

var uniqs = {};
for(var i = 0; i < duplicateAuthors.length ; i++){
        uniqs[duplicateAuthors[i]] = null;
}
var uniqAuthors = Object.keys(uniqs);
var uniqs={};
对于(var i=0;i
由于对象键必须是唯一的,我意识到您也可以执行以下操作来隔离唯一值

var uniqs = {};
for(var i = 0; i < duplicateAuthors.length ; i++){
        uniqs[duplicateAuthors[i]] = null;
}
var uniqAuthors = Object.keys(uniqs);
var uniqs={};
对于(var i=0;i
请发布一个完整的代码示例,以便我们重现问题。请注意,如果列表中的条目5和6相同,但条目6和条目7不同,则循环会将条目6的值视为唯一值。数组中是否确实对同一对象有多个引用,或者阵列中是否有多个彼此相似的对象(相同的属性值,但不同的对象)?如果是后者,则必须比较对象上的唯一属性,因为对象的“按引用比较”。它是所有字符串,并且有多个具有相同值的字符串。不是后者。已经添加了其余的代码。请发布完整的代码示例,以便我们重现该问题。请注意,如果列表中的条目5和6相同,但条目6和条目7不同,则循环会将条目6的值视为唯一。数组中是否真的对同一对象有多个引用,或者阵列中是否有多个彼此相似的对象(相同的属性值,但不同的对象)?如果是后者,则必须比较对象上的唯一属性,因为对象的“按引用比较”。它是所有字符串,并且有多个具有相同值的字符串。不是后者。已经添加了其余的代码。这比OP(未成功)尝试的方法计算成本更高。此外,发布只包含代码的答案被认为是没有好处的。@Pointy-谢谢你的建议。实际上,我通常会发布我的答案,然后用逻辑/注释进行更新。我编写上述代码只是为了检查重复项,如果您发布面向性能的解决方案,那就太好了。问题是,如果对列表进行排序,所有重复项都将聚集在一起,这样您就可以避免在解决方案中进行类似的搜索(对于未排序的列表,这当然可以正常工作。OP在正确的轨道上,但解决方案存在缺陷。这不是与(var i=0;i相同吗@Keon-这不是与-不清楚该语句相同吗?这比OP的方法(未成功)计算成本更高正在尝试。另外,只包含代码的答案不被认为是有益的。@Pointy-谢谢你的建议。实际上,我通常会发布我的答案,然后用逻辑/注释进行更新。我编写上述代码只是为了检查重复项,如果你发布面向性能的解决方案,那就太好了。问题是t如果列表已排序,则所有重复项都将聚集在一起,这样您就可以避免在解决方案中进行类似的搜索(这当然适用于未排序的列表。OP在正确的轨道上,但解决方案存在缺陷。这与(var i=0;i不一样吗var uniqAuthors=Object.keys(uniqs);@Keon-这不就是-语句不清楚吗?