Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/448.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_Arrays_Algorithm - Fatal编程技术网

从数组数组中删除重复项(javascript)

从数组数组中删除重复项(javascript),javascript,arrays,algorithm,Javascript,Arrays,Algorithm,我试图使用javascript删除数组中的重复项,其中重复项始终位于长度为1的数组中。例如 [ [23, 46, 43, 44] [46] [52, 51] [53] [44] [55, 66] ] 在本例中,我希望删除数组[46]和[44],但保留[53]。这些单条目重复数组的数量是可变的。想法 编辑:下面是我最后所做的工作,其中stacks_array是数组的数组 function stacks_sanatizer(stacks_array){

我试图使用javascript删除数组中的重复项,其中重复项始终位于长度为1的数组中。例如

[  [23, 46, 43, 44]
   [46]
   [52, 51]       
   [53]
   [44]
   [55, 66] ]
在本例中,我希望删除数组[46]和[44],但保留[53]。这些单条目重复数组的数量是可变的。想法

编辑:下面是我最后所做的工作,其中stacks_array是数组的数组

function stacks_sanatizer(stacks_array){

    var output_array = [],      
    used_cards =[];
    used_cards[70] = undefined;     

    for (each_stak in stacks_array){
        if((stacks_array[each_stak].length > 1) && (stacks_array[each_stak] !== "")){
            for (i=0; i<stacks_array[each_stak].length;i++){
                var card_number = stacks_array[each_stak][i].attrs.fill.substr(27).replace('.jpg)','');
                used_cards[card_number - 1] = true;
            }
        }
    }

    for (each_stak in stacks_array){
        if(stacks_array[each_stak] !== ""){
            if(stacks_array[each_stak].length === 1){
                card_number = stacks_array[each_stak][0].attrs.fill.substr(27).replace('.jpg)','');
                if(used_cards[card_number - 1] !== true){
                    output_array.push(stacks_array[each_stak]);
                    used_cards[card_number - 1] = true;
                }
            }
            else{
                output_array.push(stacks_array[each_stak]);
            }
        }
    }

    //delete doubles    
    for(each_pile in output_array){ 
        output_array[each_pile] = output_array[each_pile].filter(function(elem, pos) {
            return output_array[each_pile].indexOf(elem) == pos;
        })  
    }
    return output_array;
}
函数堆栈\u sanatizer(堆栈\u阵列){
变量输出_数组=[],
使用的卡片=[];
已用卡片[70]=未定义;
用于(堆栈数组中的每个堆栈){
if((堆栈数组[每个堆栈].length>1)和&(堆栈数组[每个堆栈]!=“”){

对于(i=0;i,您可能希望使用哈希的一些组合来查找冲突,然后拼接您不想要的内容

像这样:

function removeDuplicates(listOfLists) {
    var hash = {};
    for (var i = 0; i < listOfLists.length; i++) {
        var array = listOfLists[i];
        for (var j = 0; j < array.length; j++) {
            var val = array[j];
            var hashedVal = hash[val];
            if (hashedVal === undefined) {
                hash[val] = true;
            }
            else {
                array.splice(j, 1);
                if (array.length === 0) {
                    listOfLists.splice(i, 1);
                }
            }
        }
    }
}
函数移除的副本(列表){
var hash={};
for(var i=0;i
实现此目的的伪代码:

  • 遍历外部数组:对于每个内部数组,将数字散列到哈希表中
  • 在将其散列到表中时,如果存在该数组的现有条目,请检查该数组的长度 是1,如果是,则删除阵列
  • 否则,在哈希表中输入条目并保留该内部数组

  • 希望这有帮助:)

    hashtables…始终是hashtables。99%的时间都是hashtables。此外,检查元素是否来自长度为1的数组。要删除的单个数组能否位于较长数组中的重复项之前?@Teepeemm哦,这是一个好问题。要稍微修改我的注释,可以在外部列表中迭代两次,即hashing inn第一次检查len>1的er列表,第二次检查重复请显示您的尝试。我们不是来为您工作的,我们将帮助您解决代码中的问题。