如何基于指定水果名称数组从Fruits对象中提取对应子对象?
提取指定水果对象的解决方案
没问题,这有几种简单高效的方法可以帮你从原始的Fruits对象中提取指定水果的数据,完全符合你的需求:
方法1:使用Array.reduce()(推荐)
reduce方法非常适合这种从数组构建对象的场景,逻辑清晰且高效:
var Fruits={ "Banana": { "Price": "50", "quility": "good" }, "Mango": { "Price": "100", "quility": "best" }, "Orange": { "Price": "80", "quility": "good" }, "Apple": { "Price": "150", "quility": "best" } }; var SpecificFruits = ["Banana", "Mango"]; // 构建结果对象 var results = SpecificFruits.reduce((accumulator, fruitName) => { // 先检查当前水果是否存在于原始对象中,避免处理不存在的键 if (Fruits.hasOwnProperty(fruitName)) { // 用对象展开运算符做浅拷贝,防止修改结果时影响原始Fruits对象 accumulator[fruitName] = { ...Fruits[fruitName] }; } return accumulator; }, {}); // 初始值为一个空对象 console.log(results);
方法2:使用Array.forEach()(更直观)
如果你觉得reduce有点抽象,用forEach遍历数组手动构建结果对象会更易懂:
var results = {}; SpecificFruits.forEach(fruitName => { // 检查水果是否存在 if (Fruits[fruitName]) { // 同样可以用浅拷贝避免引用问题 results[fruitName] = { ...Fruits[fruitName] }; } }); console.log(results);
方法3:ES6+ 简洁写法(Object.fromEntries)
如果你偏爱更简洁的语法,可以结合Object.fromEntries和map来实现:
var results = Object.fromEntries( // 先把每个水果转成[key, value]格式的数组,再过滤掉不存在的条目 SpecificFruits.map(fruit => [fruit, Fruits[fruit]]).filter(([_, value]) => value) ); console.log(results);
注意事项
你给出的示例结果里Mango对象有重复的quility键,这在JavaScript中是不合法的——当对象里出现重复键时,后面的键值会直接覆盖前面的,所以实际运行后Mango只会保留一个"quility": "best"。
内容的提问来源于stack exchange,提问作者Rajeev Thakur
相关产品推荐
相关产品推荐

