#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. Спасибо, что объяснили мне. Я был в тупике с этим вопросом в течение половины дня. Теперь я действительно понимаю это.