Wie erreiche ich isBoatOwner, damit ich den Wert in einem Array zurückgeben kann?

Mein Code gibt undefined zurück.

pluck(
  [
    { name: "Tim", isBoatOwner: true },
    { name: "Matt", isBoatOwner: false },
    { name: "Elie" }
  ],
  "isBoatOwner"
);

function pluck(defObj, key) {
  let arr = [];
  for (let i = 0; i < defObj.length; i++) {
    if (Object.keys(defObj[i]) == key) {
      arr.push(defObj[i][key]);
    } else {
      arr.push(undefined);
    }
  }
  return arr.flat();
}
-1
Jonas Chan 18 Aug. 2020 im 23:22

2 Antworten

Beste Antwort

In Ihrem Code versuchen Sie, ein Array mit einer Zeichenfolge zu vergleichen, um festzustellen, ob die Eigenschaft vorhanden ist. Das wird niemals passen

function pluck(defObj, key) {
  let arr = [];
  for (let i = 0; i < defObj.length; i++) {
    // if (Object.keys(defObj[i]) == key) {
    if (defObj[i][key] !== undefined) {
      arr.push(defObj[i][key]);
    } else {
      arr.push(undefined);
    }
  }
  return arr.flat();
}

var result = pluck(
  [{
      name: "Tim",
      isBoatOwner: true
    },
    {
      name: "Matt",
      isBoatOwner: false
    },
    {
      name: "Elie"
    }
  ],
  "isBoatOwner"
);

console.log(result);

Aber die Prüfung macht nicht allzu viel Sinn, da Sie undefiniert hineinschieben. So könnte es einfach sein

function pluck(defObj, key) {
  let arr = [];
  for (let i = 0; i < defObj.length; i++) {
    arr.push(defObj[i][key]);
  }
  return arr.flat();
}

var result = pluck(
  [{
      name: "Tim",
      isBoatOwner: true
    },
    {
      name: "Matt",
      isBoatOwner: false
    },
    {
      name: "Elie"
    }
  ],
  "isBoatOwner"
);

console.log(result);

Moderner Ansatz ist nur Karte

function pluck(defObj, key) {
  // return defObj.map(function(item) { return item[key]; });
  return defObj.map(item => item[key]);
}

var result = pluck(
  [{
      name: "Tim",
      isBoatOwner: true
    },
    {
      name: "Matt",
      isBoatOwner: false
    },
    {
      name: "Elie"
    }
  ],
  "isBoatOwner"
);

console.log(result);
0
epascarello 18 Aug. 2020 im 20:31

Alles was Sie brauchen ist ein einfaches .map():

console.log(pluck(
  [
    { name: "Tim", isBoatOwner: true },
    { name: "Matt", isBoatOwner: false },
    { name: "Elie" }
  ],
  "isBoatOwner"
));

function pluck(defObj, key) {
  return defObj.map(function (obj) {
    return obj[key];
  });
}

Die obige Funktion sammelt also alle Werte von isBoatOwner aus dem Array und sendet sie als Array von Werten.

[
  true,
  false,
  undefined
]
1
Praveen Kumar Purushothaman 18 Aug. 2020 im 20:25