我一直在使用功能性的javascript,并且使用解构功能来了解util函数。
是否可以使用...rest
传递对象键的名称以便以后过滤掉属性?
阅读......休息文档我还没有看到任何解构。
如果没有什么解决方案可以解决这个问题?
const stripObject = attr => ({ ...attr }) => ({ ...attr });
const getUserProps = stripObject(['_id', 'firstName']);
console.log(getUserProps({ _id: 1, firstName: 'foo', lastName: 'bar' }));
/*
I understand right now whats happening is the []
passed is being ignored and its just returning a
function that passing in all the props
{
_id: 1,
firstName: 'foo'
}
*/
答案 0 :(得分:2)
如果您想传播内容,可以传播专门准备的代理:)
const stripObject = attrs => obj => ({ ...new Proxy(obj, {
ownKeys() {
return attrs
}
})
});
const getUserProps = stripObject(['_id', 'firstName']);
console.log(getUserProps({
_id: 1,
firstName: 'foo',
lastName: 'bar'
}));
答案 1 :(得分:1)
public function deleteArea($area_id='area_id')
{
$result = $this->um->deleteArea($area_id);
if ($result) {
$this->session->set_flashdata('success', '<b>'.$area_name.'</b> deleted successfully on '.date('d/m/Y H:i:s'));
} else {
$this->session->set_flashdata('error', 'Something wrong! Please try again.');
}
redirect(base_url('utilities/areaList'));
}
表示“获取传入的对象的所有属性并将其分配给分配给{ ...attr }
的新对象”。即你只是创建了一个传入的对象的浅层克隆。
即。除克隆部分
外,这两个函数是等价的attr
所以不,你想要的是不可能的(这种方式)。 您无法动态声明参数。
如果您想提取特定道具,可以根据您的要求调整此方法(One-liner to take some properties from object in ES 6):
({...foo}) => foo
foo => foo
答案 2 :(得分:1)
在学习了我原本不可能的解决方案后,我最终使用的是减少最初传递的键,然后抓住prop形式的对象。
const stripObject = keys => obj => {
return keys.reduce((p, c) => (
{ ...p, [c]: obj[c] }
), {});
};
const getUserProps = stripObject(['_id', 'firstName']);
console.log(getUserProps({
_id: 1,
firstName: 'foo',
lastName: 'bar'
}));