如何在Javascript中从数组中删除重复项?

时间:2015-01-25 06:42:32

标签: javascript

这里我有两个多行文本框,并在两个文本框中输入一些数据 TXT1 1,1,1,2,2,2,3 TXT2 1,2,3,4,5, 当我按下“过滤器”按钮时,它会显示第三个文本框中的数据 txt3 4,5(两个文本框都有这些数字) 我的片段是

<script type="text/javascript">
    function GetDistinctElements(source,source1, target) {           
        var input = source.value.trim().replace(';', ',').split(',');
        var input1 = source1.value.trim().replace(';', ',').split(',');           
        var Array = input.concat(input1);
        var distinctArray = Array.filter(function (item, pos) {              
            return Array.indexOf(item) == pos;
        });           
        target.value = distinctArray.join(',');
    }
</script>

我的控件是

<table border="0" align="left">
    <tr>
        <td>Enter Numbers:</td>
        <td> <asp:TextBox ID="txt1" TextMode="MultiLine" runat="server"></asp:TextBox></td>
        <td>Enter Numbers:</td>
        <td><asp:TextBox ID="txt2" TextMode="MultiLine" runat="server"></asp:TextBox></td>
    </tr>
    <tr>
        <td><input type='button' value='Get Distinct Items' onclick='GetDistinctElements(<%= txt1.ClientID %>,<%= txt2.ClientID %>,<%= txt3.ClientID %>); return false;' /></td>
        <td><asp:TextBox ID="txt3" TextMode="MultiLine" runat="server"></asp:TextBox></td>
    </tr>
</table>

当我尝试这个片段时,我没有得到预期的输出。

2 个答案:

答案 0 :(得分:0)

替换它:

var Array = input.concat(input1);
var distinctArray = Array.filter(function (item, pos) {              
    return Array.indexOf(item) == pos;
});           

由此:

var input2 = input.concat(input1);
input2.sort(function(a,b){return a-b});
var prev= null;
var distinctArray = input2.filter(function (item, pos) {              
    if (item == prev){
      return false;
    }
    prev = item;
    return true;
});           

答案 1 :(得分:0)

我得到了答案

 function GetDistinctElements(source,source1, target) {
        // Get the items in your input
        var input = source.value.trim().replace(';', ',').split(',');
        var input1 = source1.value.trim().replace(';', ',').split(',');           
        input1 = input1.filter(function (val) {
            return input.indexOf(val) == -1;
        });
        // Output the result in  target area
        target.value = input1.join(',');