如何生成满足值非零、总和小于10要求的对象键值对数组
完全可以用reduce实现,你可以在累计过程中同时跟踪当前选中项的总和,逻辑如下:
实现代码
const obj = { a: 5, b: 3, c: 0, d: 9 } const getFilteredArr = (targetObj) => { return Object.entries(targetObj).reduce((acc, [key, value]) => { // 先过滤值为0的项 if (value === 0) return acc // 计算加入当前项后的总和 const newSum = acc.sum + value // 总和小于10才加入结果 if (newSum < 10) { acc.result.push([key, value]) acc.sum = newSum } return acc // 初始值同时存结果数组和累计总和 }, { result: [], sum: 0 }).result } const arr = getFilteredArr(obj) console.log(arr) // 输出 [['a', 5], ['b', 3]]
逻辑说明
- reduce初始值设置为包含结果数组
result和累计和sum的对象,同步跟踪两个状态 - 遍历每一项时先跳过值为0的项
- 校验加入当前项后的总和是否小于10,符合要求就将键值对推入结果数组,同时更新累计和
- 最终提取累计对象中的
result字段就是需要的结果
如果需要调整选中优先级,修改Object.entries返回的数组顺序即可。
内容的提问来源于stack exchange,提问作者karo-s
相关产品推荐
相关产品推荐

