有没有办法将从jQuery.uniqueSort()中删除的项目存储在变量中?

时间:2016-11-04 21:37:30

标签: jquery

我有以下jQuery脚本:

var greetingsArray = [
    "Hello, Debbie!",
    "Hello, Randy!",
    "Hello, Carl!" ,
    "Hello, Patrick!",
    "Hello, Susan!",
    "Hello, Susan!",
    "Hello, Carl!"
];

$.uniqueSort(greetingsArray);

有没有办法获取从阵列中删除的项目?如果是这样,它将如何用于显示显示这些值的消息?

例如,我有以下HTML:

<div id="greetings"></div>

我想使用以下jQuery脚本在该div元素中显示已删除的重复问候语:

var greetingsRemoved = ...;
$("#id").html("Removed the following duplicate greetings: " + greetingsRemoved);

我可以用什么来代替...来实现这一目标?我希望这既不困难也不复杂。

1 个答案:

答案 0 :(得分:1)

尽管使用jQuery.uniqueSort()执行此操作可能是一件坏事,因为API文档中的描述中所述的原因,出于某种原因,它的工作原理如下:

只是测试:请勿使用此示例!

&#13;
&#13;
var greetingsArray = [
    "Hello, Debbie!",
    "Hello, Randy!",
    "Hello, Carl!" ,
    "Hello, Patrick!",
    "Hello, Susan!",
    "Hello, Susan!",
    "Hello, Carl!"
];

var sortedArray = greetingsArray.slice().sort();
var greetingsDuplicate = [];

for (var i = 0; i < greetingsArray.length - 1; i++) {
	if (sortedArray[i + 1] == sortedArray[i]) {
		greetingsDuplicate.push(sortedArray[i]);
	}
}

$("#duplicate").html("Duplicate Greetings: " + greetingsDuplicate.join(", "));

$.uniqueSort(greetingsArray);

$("#unique").html("Unique Greetings: " + greetingsArray.sort().join(", "));
&#13;
<div id="unique"></div>
<div id="duplicate"></div>

<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script>
&#13;
&#13;
&#13;

但是,有一种更好的方法可以通过实施从herehere提供的答案派生的方法来实现这一目标,而不是更准确地显示您想要的结果。

实际答案

&#13;
&#13;
    var greetingsArray = [
        "Hello, Debbie!",
        "Hello, Randy!",
        "Hello, Carl!" ,
        "Hello, Patrick!",
        "Hello, Susan!",
        "Hello, Susan!",
        "Hello, Carl!"
    ];
    
    var greetingsUnique = [];
    
    $.each(greetingsArray, function(index, value){
        if($.inArray(value, greetingsUnique) === -1) greetingsUnique.push(value);
    });
    
    $("#unique").html("Unique Greetings: " + greetingsUnique.sort().join(", "));
    
    var sortedArray = greetingsArray.slice().sort();
    var greetingsDuplicate = [];
    
    for (var i = 0; i < greetingsArray.length - 1; i++) {
    	if (sortedArray[i + 1] == sortedArray[i]) {
    		greetingsDuplicate.push(sortedArray[i]);
    	}
    }
    
    $("#duplicate").html("Duplicate Greetings: " + greetingsDuplicate.join(", "));
&#13;
<div id="unique"></div>
<div id="duplicate"></div>

<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script>
&#13;
&#13;
&#13;