Object.entries(obj).reduce((acc, [key, value]) => {
if (someCondition(key, value)) {
acc[key] = value;
}
return acc;
}, {});
Object.entries(obj)
.filter(([key, value]) => someCondition(key, value))
.reduce((acc, [key, value]) => {
acc[key] = value;
return acc;
}, {});
以上两个块执行相同操作:创建obj
的副本,并根据someCondition
删除一些属性。
首选哪种方式?为什么?
答案 0 :(得分:3)
总是取决于。
第一个案例 - reduce
里面有条件 - 你只需将数据集循环一次。
第二种情况为您提供了两个循环(第二种情况适用于有限数据集),但代码更易读,操作分离(过滤/修改数据)。
答案 1 :(得分:0)
我更喜欢完全必要的方法
function filterProperties(obj, predicate) {
const res = {};
for (const key in obj) {
const val = obj[key];
if (predicate(key, var))
res[key] = val;
}
return res;
}
或完全功能性的方法
function filterProperties(obj, predicate) {
return fromEntries(Object.entries(obj).filter(entry => predicate(...entry)));
}
function fromEntries(entries) {
const res = {};
for (const [key, val] of entries) // using `reduce` is not much of an advantage here
res[key] = val;
return res;
}