Назад к вопросам
Middle+
2
export function foo(o, arr) { return arr.reduce((a, x) => { // if (o.hasOwnProperty(x)) a[x] = o[x]; if (o[x]) a[x] = o[x]; return a; }, {}); } const obj = {a: 's'} foo(obj, ['a'])
Компании, где спрашивали
Mayflower
Ответ от нейросети
sobes.tech AI
В функции foo происходит фильтрация объекта o по ключам из массива arr. Важно различать две проверки:
o.hasOwnProperty(x)проверяет, есть ли у объекта собственное свойство с именемx, включая свойства со значениемundefinedилиnull.if (o[x])проверяет истинность значения свойства, то есть свойства с ложными значениями (0,false,null,undefined,'') будут проигнорированы.
В вашем примере:
const obj = {a: 's'};
foo(obj, ['a']); // { a: 's' }
Если заменить условие на if (o.hasOwnProperty(x)), то функция будет копировать все свойства, даже если их значение ложное. Это более корректно, если нужно именно проверить наличие свойства, а не его значение.
Пример:
const obj = {a: 0, b: false, c: null};
foo(obj, ['a', 'b', 'c']);
// с hasOwnProperty: { a: 0, b: false, c: null }
// с if(o[x]): {} (потому что 0, false, null — ложные)
Рекомендуется использовать hasOwnProperty для проверки наличия свойства, если важны все значения.