我有一个函数返回一个只定义了属性的对象。
如何重构函数,以便我不需要为每个参数值创建if子句?必须有更优雅的方式来做到这一点。
const getQuery = ({ foo, bar, zoo }) => {
const query = {};
if (foo) {
query.foo = foo;
}
if (bar) {
query.bar = bar;
}
if (zoo) {
query.zoo = zoo;
}
return query;
}
答案 0 :(得分:1)
我会做像
这样的事情function getQuery(obj){
// filter the accepted keys
var filtered = Object.keys(obj).filter((k) => ~["foo", "bar", "baz"].indexOf(k))
// construct new object with filtered keys
var query = {}
filtered.forEach((k) => query[k] = obj[k])
return query
}
答案 1 :(得分:1)
这是一个基本功能,它只复制wantedProps数组中提供的属性。它不会改变原始对象。
let filterProperties = (originalObject = {}, wantedProps = []) =>
{
let filteredObject = {};
wantedProps.forEach( val => filteredObject[val] = originalObject[val] );
return filteredObject;
}
如果您只是想过滤掉未定义的val,那么您可以这样做:
obj => {
let newObject = {}
Object.keys(obj).forEach(key => {
if(obj[key] !== undefined) newObject[key] = obj[key];
})
return newObject;
}