Как я могу попасть внутрь вложенного объекта в javascript?

#javascript

#javascript

Вопрос:

Как мне этого достичь isBoatOwner , чтобы я мог вернуть его значение в массив?

Мой код возвращается undefined .

 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. Object.keys(defObj[i]) == key Вы сравниваете массив со строкой.

Ответ №1:

Все, что вам нужно, это простой .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];
  });
}  

Итак, вышеупомянутая функция собирает все значения isBoatOwner из массива и отправляет его в виде массива значений.

 [
  true,
  false,
  undefined
]
  

Ответ №2:

В вашем коде вы пытаетесь сравнить массив со строкой, чтобы увидеть, существует ли свойство. Это никогда не будет соответствовать

 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);  

Но проверка не имеет слишком большого смысла, поскольку вы вводите в нее undefined. Так что это может быть просто

 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);  

Современный подход — это просто map

 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);  

Комментарии:

1. Спасибо, что объяснили мне. Я был в тупике с этим вопросом в течение половины дня. Теперь я действительно понимаю это.