Dies ist eine sehr einfache Frage, aber ich konnte meinen Kopf nicht darum wickeln. Ich habe ein Array von Seiten mit n Anzahl von Seitennamen. Ich möchte eine Schleife mit einigen Seitennamen ausführen, die nicht darin enthalten sind.

var arr = ["page-name", "page-name-two", 'page-3', 'some-more', 'another-page']; 
for (var page in arr) {
     if (arr[page] !== "page-name" || arr[page] !== "some-more") {
        console.log(arr[page])
     }
 }

Das gewünschte Ergebnis ist:

page-name-two
page-3
another-page

Was mache ich falsch?

3
Amit 17 Apr. 2018 im 21:42

3 Antworten

Beste Antwort

Nehmen Sie einfach logisches UND {{X0} } anstelle von logisch ODER ||.

Bitte verwenden Sie eine for Schleife mit einer Variablen für den Index anstelle der Schlüssel eines Objekts.

Quelle:

var arr = ["page-name", "page-name-two", 'page-3', 'some-more', 'another-page']; 
for (var i = 0; i < arr.length; i++) {
     if (arr[i] !== "page-name" && arr[i] !== "some-more") {
        console.log(arr[i]);
     }
 }

Der Ausdruck

arr[i] !== "page-name" || arr[i] !== "some-more"

Ist immer wahr, weil zum Beispiel wenn

arr[i] === "page-name"

Dann ist der andere Teil true wegen

"page-name" !== "some-more"`.
3
Nina Scholz 17 Apr. 2018 im 18:50

Ich würde die Werte speichern, die Sie entfernen möchten, und dann Array.filter in Ihrer Liste aller Seitennamen ausführen, um Übereinstimmungen zu finden. Wenn ein Name übereinstimmt, entfernen Sie ihn aus dem endgültigen Array.

// This can be a array of whatever strings you're looking to eliminate from the array
const valuesToFilter = ['page-name', 'some-more'];

// Your original array
const arr = ["page-name", "page-name-two", 'page-3', 'some-more', 'another-page']; 

// Use Array.filter to eliminate anything that doesn't pass the filter test
const filteredArr = arr.filter(page => {
  let foundMatch = false;

  valuesToFilter.forEach(value => {
    if (page === value) {
      foundMatch = true;
    }
  })

  if (!foundMatch) return page;
});

console.log(filteredArr);
0
Snuglas 17 Apr. 2018 im 18:55

Sie sollten .filter() verwenden, um Werte aus dem ersten Array zu filtern und dann die Aktion auszuführen, die Sie für das resultierende Array ausführen möchten. Dies erspart Ihnen das Schreiben vieler OR / AND Bedingungen, falls Sie mehr Werte filtern müssen.

let arr1 = ["page-name", "page-name-two", 'page-3', 'some-more', 'another-page'],
    arr2 = ["page-name", 'some-more'];

let result = arr1.filter(s => !arr2.includes(s));

console.log(result);
1
Mohammad Usman 17 Apr. 2018 im 18:52