Правильный ответ уже был предоставлен Тапларом в комментарии, но у меня есть ощущение, что ваша проблема связана с неправильным пониманием того, что делает Object.keys. Если это не правильно и это просто опечатка, не стесняйтесь игнорировать оставшуюся часть этого поста Во-первых, это правильный код, который должен работать:
export const removeId = (obj, omitId) => {
return Object.keys(obj).reduce((object, key) => {
if (key !== omitId) {
object[key] = obj[key];
}
return object;
}, {});
};
Но почему это работает, и почему это не сработало раньше? У меня такое ощущение, что вы положили return object
и хотя этого было бы достаточно. Причина, по которой этого недостаточно, заключается в том, что функция reduce
фактически принимает замыкание, а это означает, что это совершенно другая функция. Чтобы понять это, мы можем разбить код на части так:
export const removeId = (obj, omitId) => {
const innerFunction = (object, key) => {
if (key !== omitId) {
object[key] = obj[key];
}
return object;
};
Object.keys(obj).reduce(innerFunction, {});
};
Теперь обратите внимание, что строка с функцией reduce
это просто цепочка операторов. Мы это называем, но ничего не делаем с результатом.
Чтобы взглянуть на это по-другому:
Object.keys(obj) -> returns an array, the contents of which are the
keys of the object that you put into it
array.reduce() -> calls a function for every element of the array. It returns
an object built from that function
Таким образом, чтобы получить результат функции reduce
, который будет отправлен обратно из вашей функции removeId
, вам необходимо вернуть его, что и делает верхний код.
Надеюсь, это имеет смысл.