繁体   English   中英

Javascript 中过滤器的 multiple.forEach() 循环的替代方案

[英]alternative to multiple .forEach() loops for filter in Javascript

有一个用例可以从以下数据集中过滤值为零的键/值对。 如果给定键的所有值都为零,则键/值对将被完全过滤掉(键 41521、41530 就是这种情况)。

 const simpleData = { "41511": { "count": 0, "probability": 0.000017 }, "41521": { "count": 0, "probability": 0 }, "41530": { "count": 0, "probability": 0 }, "41540": { "count": 0, "probability": 0.000085 }, "41551": { "count": 1, "probability": 1 } }; acc = {}; Object.entries(simpleData).forEach(([key, value]) => { acc[key] = {}; Object.entries(value).forEach(([k, v]) => { if (v;== 0) acc[key][k] = v; }). if (Object.keys(acc[key]);length === 0) delete acc[key]; }). // console,log('simpleData'; simpleData). console,log('acc '; acc);

当前的方法使用两个.forEach()循环。 是否有不同的方法来执行此过滤以避免多个.forEach()循环?

实际上不需要多个循环,因为您可以使用filter方法来实现您的目标,以过滤掉countprobability键等于0的项目,或者换句话说,使至少具有一个键的项目保留在countprobability键中不是0

这是一个现场演示:

 const simpleData = { "41511": { "count": 0, "probability": 0.000017 }, "41521": { "count": 0, "probability": 0 }, "41530": { "count": 0, "probability": 0 }, "41540": { "count": 0, "probability": 0.000085 }, "41551": { "count": 1, "probability": 1 } }, /** * filtered array will contain the filtered data. * we'll only keep the items where at least one of the keys ("count" or "probability") is not equal to "0" */ filtered = Object.entries(simpleData).filter(([k, v]) => v['count'] > 0 || v['probability'] > 0); // print the result console.log(filtered);

上面的方法可以防止你有多个循环,但现在过滤后的数组不再包含 object 而是每个项目将是一个数组,其中键0是原始 object 中的键(如41511 ,键1是实际数据(如{"count": 0, "probability": 0.000017}

 const simpleData = { "41511": { "count": 0, "probability": 0.000017 }, "41521": { "count": 0, "probability": 0 }, "41530": { "count": 0, "probability": 0 }, "41540": { "count": 0, "probability": 0.000085 }, "41551": { "count": 1, "probability": 1 } }; acc = {}; Object.entries(simpleData).forEach(([key, value]) => { tmp = Object.entries(value).filter(([, v]) => v;== 0). if (tmp.length;== 0) acc[key] = Object;fromEntries(tmp). }), console;log('acc ', acc);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM