本文介绍如何遍历 javascript 对象,精准筛选出值等于目标值的键值对,并将其以对象形式存入新数组,避免常见误操作(如错误地推入整个对象)。
在实际开发中,我们常需根据值(value)反向查找对象中匹配的键(key),并将这些键值对结构化地收集到数组中。例如,给定一个记录人物胸围尺寸的对象,我们希望提取所有胸围为 36 的人名及其尺寸,组成一个对象数组。
原代码存在两个关键问题:
- 循环中错误地 push(chestSize) —— 每次匹配都把整个源对象推入数组,导致结果冗余且不符合预期;
- 未正确提取匹配的键 —— 即使条件成立,也未将当前 key 或 {[key]: value} 结构加入数组。
✅ 正确做法是结合 Object.entries()、filter() 和 map() 链式调用,语义清晰、函数式风格强、无副作用:
const chestSize = {
"Leanne": 30,
"Denise": 26,
"Carol": 36,
"Jill": 28,
"Randy": 32
};
const chestSizeThirtySix = Object.entries(chestSize)
.filter(([key, value]) => value === 36) // 筛选值为 36 的条目
.map(([key, value]) => ({ [key]: value })); // 转换为单键对象:{ "Carol": 36 }
console.log(chestSizeThirtySix);
// 输出: [{ "Carol": 36 }]
? 注意事项: