Javascript 对对象使用过滤器
我有一个只包含简单键值对的对象,我想过滤掉所有具有假值的属性。使用Array.prototype.filter()是否可以实现这一点 使用Array.prototype.filter()是否可以实现这一点 可以,但不能直接执行:您可以在使用Javascript 对对象使用过滤器,javascript,functional-programming,Javascript,Functional Programming,我有一个只包含简单键值对的对象,我想过滤掉所有具有假值的属性。使用Array.prototype.filter()是否可以实现这一点 使用Array.prototype.filter()是否可以实现这一点 可以,但不能直接执行:您可以在使用对象后执行此操作。键或类似键: var arrayOfTruthyValues = Object.keys(obj).filter(key => obj[key]); 结果是一个truthy值数组 如果希望最终结果是一个对象,将filter与reduc
对象后执行此操作。键
或类似键:
var arrayOfTruthyValues = Object.keys(obj).filter(key => obj[key]);
结果是一个truthy值数组
如果希望最终结果是一个对象,将filter
与reduce
组合可以做到:
var newObj = Object.keys(obj)
.filter(key => obj[key])
.reduce((newObj, key) => {
newObj[key] = obj[key];
return newObj;
}, {});
这主要是使用reduce
作为循环构造(因为我们从来没有实际更改累加器值,我们只是不断返回相同的对象),这有时被认为是一个“abusage.”:-),这意味着我们可以不使用过滤器
部分,只在reduce
中放置一个if
,但是
请注意,
Object.keys
仅包括对象自己的可枚举属性。如果您想要自己的属性,即使它们不可枚举,也可能是Object.getOwnPropertyNames
使用Array.prototype.filter()是否可以实现这一点
可以,但不能直接执行:您可以在使用对象后执行此操作。键
或类似键:
var arrayOfTruthyValues = Object.keys(obj).filter(key => obj[key]);
结果是一个truthy值数组
如果希望最终结果是一个对象,将filter
与reduce
组合可以做到:
var newObj = Object.keys(obj)
.filter(key => obj[key])
.reduce((newObj, key) => {
newObj[key] = obj[key];
return newObj;
}, {});
这主要是使用reduce
作为循环构造(因为我们从来没有实际更改累加器值,我们只是不断返回相同的对象),这有时被认为是一个“abusage.”:-),这意味着我们可以不使用过滤器
部分,只在reduce
中放置一个if
,但是
请注意,
Object.keys
仅包括对象自己的可枚举属性。如果您想要自己的属性,即使它们不可枚举,也可能是Object.getOwnPropertyNames
。请阅读。关键短语:“搜索、研究”和“解释……任何阻碍你自己解决问题的困难”。请阅读。关键短语:“搜索、研究”和“解释……任何阻碍你自己解决问题的困难”。我们有一个小争论,我期待着你对这件事的意见。谁得到了正确的答案?谁的答案完全错了?如果你能说点什么。。。我们有一个小争论,我期待着你的意见在这种情况下。谁得到了正确的答案?谁的答案完全错了?如果你能说点什么。。。