2013-07-11 6 views
0

Je trouve difficile de comprendre ce que je pense être une tâche assez simple. Mon cerveau est juste frit en ce moment et j'ai une date limite. :(Suppression des éléments d'un tableau multidimensionnel d'un autre tableau multidimensionnel

Je dois prendre tous les réseaux d'éléments d'un tableau multidimensionnel et les supprimer d'un autre tableau multidimensionnel.

Arr1 = [["Tom", "161"], ["Dick", "29"], ["Harry", "46"], ["Mike", "72"], ["Sally", "11"]]; 

Arr2 = [["Harry", "46"], ["Mike", "72"], ["Tom", "161"]]; 

Donc, dans ce cas, je veux prendre tous les réseaux d'éléments de Arr2 et de les supprimer de sorte que Arr1 après Arr1 ressemblerait à ceci:

Arr1 = [["Dick", "29"], ["Sally", "11"]]; 

est-ce que du sens

EDITx2: Attendez, non, ignorer, j'étais stupide.

+0

Ouais, il est logique. Avez-vous essayé quelque chose? La solution générale sera de faire une boucle sur chacun d'entre eux et de vérifier si l'un des éléments correspond ... si c'est le cas, vous utiliseriez la méthode '.splice()' pour supprimer un élément. Bien qu'il puisse être optimisé pour utiliser une recherche au lieu de la boucle imbriquée – Ian

+0

S'il vous plaît voir ma modification. – AzzyDude

Répondre

0

Puisqu'il est toutes les chaînes que vous pourriez faire preuve de créativité avec des méthodes de cordes et chaînage. Probablement pas la meilleure performance et un peu délicat, mais cela fonctionne:

var arr = [["Tom", "161"], ["Dick", "29"], ["Harry", "46"], ["Mike", "72"], ["Sally", "11"]]; 
var remove = [["Harry", "46"], ["Mike", "72"], ["Tom", "161"]]; 

var result = arr 
    .join('|') 
    .replace(RegExp(remove.join('|'),'g'),'') 
    .match(/[^|]+/g) 
    .map(function(s){ return s.split(',') }); 

console.log(result); //=> [["Dick","29"],["Sally","11"]] 

Vous pouvez même essayer d'utiliser JSON. Je ne recommanderais pas cela pour la production en tout cas, juste pour le plaisir.

Démo:http://jsbin.com/obokuy/1/edit

+0

Quoi que ce soit à propos de ne pas produire, le vôtre était le seul que je pouvais travailler. Merci! – AzzyDude

0

Si vous avez besoin d'assembler quelque chose rapidement, utilisez une boucle imbriquée pour parcourir les éléments de Arr2 pour chaque élément dans Arr1 et faire une comparaison sur chacun d'eux. Vous pouvez regarder les réponses à cette question pour une indication sur la comparaison des tableaux internes:

How to check if two arrays are equal with JavaScript?

1

En supposant que vous avez toujours deux éléments dans le tableau, et un élément « unique » est défini comme une combinaison des le nom et le numéro, vous pouvez faire quelque chose comme ceci:

function(array1, array2) { 
    var seen = {}; 
    var returnedArray = []; 

    for(var i = 0; i < array2.length; i++) { 
     var elements = array2[i]; 
     seen[elements[0] + elements[1]] = true; 

     //an alternative to the above is to do 
     //seen[JSON.stringify(elements)] = true; 
    } 

    for(var i = 0; i < array1.length; i++) { 
     var elements = array1[i]; 
     if(!seen[elements[0] + elements[1]]) { 
      returnedArray.push(elements); 
     } 

     //an alternative to the above is to do 
     //if(!seen[JSON.stringify(elements)]) { 
     // ... 
     //} 
     // 
     //if you took the alternate approach in the first loop 
    } 

    return returnedArray; 
} 
Questions connexes