[英]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
方法来实现您的目标,以过滤掉count
和probability
键等于0
的项目,或者换句话说,使至少具有一个键的项目保留在count
和probability
键中不是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.