Javascript 你能动态地解构一个对象来使用currying吗?

Javascript 你能动态地解构一个对象来使用currying吗?,javascript,ecmascript-next,Javascript,Ecmascript Next,我一直在玩函数式javascript,并且有了一个使用解构的util函数的想法 是否可以使用…rest将对象键的名称传递给以后的筛选属性 在阅读rest文档时,我没有看到任何关于解构的内容 如果没有,什么解决方案可以解决这个问题 const stripObject=attr=>({…attr})=>({…attr}); const getUserProps=stripObject([''u id','firstName']); log(getUserProps({u id:1,firstNam

我一直在玩函数式javascript,并且有了一个使用解构的util函数的想法

是否可以使用
…rest
将对象键的名称传递给以后的筛选属性

在阅读rest文档时,我没有看到任何关于解构的内容

如果没有,什么解决方案可以解决这个问题

const stripObject=attr=>({…attr})=>({…attr});
const getUserProps=stripObject([''u id','firstName']);
log(getUserProps({u id:1,firstName:'foo',lastName:'bar'}));
/*
我知道现在发生的是[]
passed被忽略,它只是返回一个
传递所有道具的功能
{
_id:1,
名字:“福”
}

*/
{…attr}
参数位置表示“获取传入对象的所有属性,并将其分配给分配给
attr
的新对象”。也就是说,您只是在创建传入对象的浅克隆

即,除克隆部分外,这两个功能是等效的

({...foo}) => foo
foo => foo
所以不,你想要的是不可能的(这种方式)。不能动态声明参数

如果您想推出特定的道具,可以根据您的需求调整此方法():

const stripObject = attr => obj => pick(obj, ...attr);

{…attr}
参数位置表示“获取传入对象的所有属性,并将其分配给分配给
attr
的新对象”。也就是说,您只是在创建传入对象的浅克隆

即,除克隆部分外,这两个功能是等效的

({...foo}) => foo
foo => foo
所以不,你想要的是不可能的(这种方式)。不能动态声明参数

如果您想推出特定的道具,可以根据您的需求调整此方法():

const stripObject = attr => obj => pick(obj, ...attr);

在了解到我原来不可能的情况后,我最终使用的解决方案是减少最初传递的关键点,然后从对象中获取道具

const stripObject=keys=>obj=>{
返回键。减少((p,c)=>(
{…p[c]:obj[c]}
), {});
};
const getUserProps=stripObject([''u id','firstName']);
console.log(getUserProps({
_id:1,
名字:“foo”,
姓氏:“酒吧”

}));在了解到我最初不可能解决的问题后,我最终使用的解决方案是减少最初传递的关键点,然后从对象中获取道具

const stripObject=keys=>obj=>{
返回键。减少((p,c)=>(
{…p[c]:obj[c]}
), {});
};
const getUserProps=stripObject([''u id','firstName']);
console.log(getUserProps({
_id:1,
名字:“foo”,
姓氏:“酒吧”

}));万一你想传播东西,你可以传播一个特别准备的代理:)

const stripObject=attrs=>obj=>({…新代理(obj{
ownKeys(){
返回属性
}
})
});
const getUserProps=stripObject([''u id','firstName']);
console.log(getUserProps({
_id:1,
名字:“foo”,
姓氏:“酒吧”

}));万一你想传播东西,你可以传播一个特别准备的代理:)

const stripObject=attrs=>obj=>({…新代理(obj{
ownKeys(){
返回属性
}
})
});
const getUserProps=stripObject([''u id','firstName']);
console.log(getUserProps({
_id:1,
名字:“foo”,
姓氏:“酒吧”

}));不错!那真是太棒了,前几天我读到了关于proxys的文章,看起来真的是个游戏规则改变者!我们必须仔细研究一下more@JoeWarner请记住,这个答案是为了好玩:)不推荐用于生产代码。哦,是的,这是用于测试代码的一个附带项目的黑客攻击,但有趣的不是更少。很好!那真是太棒了,前几天我读到了关于proxys的文章,看起来真的是个游戏规则改变者!我们必须仔细研究一下more@JoeWarner请记住,这个答案是为了好玩:)不建议用于生产代码。哦,是的,这是用于测试代码中的一个辅助项目的黑客攻击,但有趣的不是更少。我的意思是,从技术上讲,您可以通过使用
函数
构造函数动态定义参数,例如,
var func=new函数(params.join(“,”),“…”)
但您不应该这样做;)我的意思是,从技术上讲,您可以使用
函数
构造函数动态定义参数,例如
var func=new函数(params.join(','),'…')
,但您不应该这样做;)