Ich möchte ein Array aus einem Array von Arrays löschen, ohne sie zu iterieren.

Das erste Array sieht folgendermaßen aus:

array1 = [ 
[
[{"id":"A1","y":12},{"id":"A4","y":12}],
[{"id":"A2","y":1}], 
[{"id":"A3","y":6}]  
] 

Das zweite Array ist:

array2 = [{"id":"A1","y":12},{"id":"A4","y":12}]

Ich benutze Javascript und möchte Array2 aus Array1 löschen.

Entschuldigung für die falsche Beschreibung, wie ich festgestellt habe, dass in meinem Beispiel das zweite Array-Array ist

array2 = [{ "id": "A1", "y": 12 }, { "id": "A4", "y": 2 }] 

Die beiden Arrays haben also nur eine Spalte, was gleich ist. Wie kann ich Array1 aus Array2 löschen, obwohl sie nur ein Attribut haben, das gleich ist?

Vielen Dank.

-2
Lembared Nabil 18 Apr. 2018 im 12:25

3 Antworten

Beste Antwort

Fühlt sich komisch an, aber Sie können jedes Element des Arrays überprüfen und mit dem zweiten Array übereinstimmen. In beiden Fällen müssen Sie Ihr Array durchlaufen. Sie können nicht einfach array1[i] == array2 eingeben, sondern müssen es anders überprüfen. Ein Hack besteht darin, sie als JSON zu stringifizieren und Strings zu vergleichen, aber es gibt andere Methoden, die Sie verwenden kann verwendet werden, um Arrays zu vergleichen.

Hier ist eine einfache Demo mit einer for-Schleife

array1 = [
  [{ "id": "A1", "y": 12 }, { "id": "A4", "y": 12 }],
  [{ "id": "A2", "y": 1 }],
  [{ "id": "A3", "y": 6 }]
]
array2 = [{ "id": "A1", "y": 12 }, { "id": "A4", "y": 12 }]
l = array1.length
for (var i = 0; i < l; i++) {
  // if arrays match
  if (JSON.stringify(array1[i]) == JSON.stringify(array2)) {
    // delete the element at `i` position
    array1.splice(i, 1);
    i--;
    l--;
    // break; // if you can guarantee that no more instances will occur 
  }
}
console.log(array1)
0
Aleksey Solovey 18 Apr. 2018 im 10:01

Spleißen wird normalerweise verwendet, um ein bestimmtes Element aus dem Array zu entfernen. Ich denke, Sie möchten so etwas tun:

    var array = [

        [{"name": "sik", "gender": "male"}],
        [{"name": "sug", "gender": "female"}],
        [{"name": "hyd", "gender": "male"}]

    ];

    // it removes the second array from the array: removes the female one.
    array.splice( 1, 1 );

Beschreibung: Der Funktionsspleiß verwendet zwei Argumente, eines für den Index des Elements und das zweite für die Anzahl der zu löschenden Argumente.

Zum Beispiel: Spleißen (2, 5) - bedeutet, dass: aus dem Index 2 so lange gelöscht wird, bis 5 Elemente angezeigt werden.

Hoffe das hilft, danke.

2
Sikandar Sahab 18 Apr. 2018 im 09:49

In Plain Javascript können wir sie nicht filtern. Dies funktioniert, wenn Sie mit geschätzten Datentypen arbeiten. Hier vergleichen Sie Arrays, auf die verwiesen wird. Hier müssen wir also unseren eigenen Suchstapel schreiben

function searchForArray(haystack, needle){
var i, j, current;
for(i = 0; i < haystack.length; ++i){
if(needle.length === haystack[i].length){
  current = haystack[i];
  for(j = 0; j < needle.length && needle[j] === current[j]; ++j);
  if(j === needle.length)
    return i;
}
}
return -1;
}

var arr = [[1,3],[1,2]];
var n   = [1,3];

console.log(searchForArray(arr,n));

Sie können auf diese Frage verweisen, die auch einige Referenzressourcen enthält. Überprüfen Sie, ob ein Array in einem Array von Arrays vorhanden ist?

Ich weiß, dass Sie nach einer Lösung ohne Iteration gefragt haben, aber ich dachte nur daran, eine Vorstellung von Referenzen zu geben, die für Sie nützlich sein könnten.

0
CharanbabuKarnam 18 Apr. 2018 im 09:53