如何实现Shoes对象数组的查找、最值、编辑与排序函数?
问题修复与全功能实现方案
1. 修复findShoe函数的错误
原代码存在两处核心问题:
- 调用时传入了
Shoes类而非存储实例的myArray数组 - 比较逻辑错误,直接用对象和字符串对比,应判断实例的
Name属性
修复后的实现(含简化写法):
// 基础循环版 function findShoe(arr, shoeName) { for(let i = 0; i < arr.length; i++){ if(arr[i].Name === shoeName) return true; } return false; } // 数组方法简化版 const findShoe = (arr, shoeName) => arr.some(shoe => shoe.Name === shoeName); // 正确调用 let targetShoeName = "Nike"; console.log(findShoe(myArray, targetShoeName)); // 输出true
2. 找出ValuePerItem最高/最低的Shoe
// 找单价最高的鞋 function findMaxValueShoe(arr) { return arr.reduce((max, current) => current.ValuePerItem > max.ValuePerItem ? current : max, arr[0]); } // 找单价最低的鞋 function findMinValueShoe(arr) { return arr.reduce((min, current) => current.ValuePerItem < min.ValuePerItem ? current : min, arr[0]); } console.log("单价最高的鞋:", findMaxValueShoe(myArray)); console.log("单价最低的鞋:", findMinValueShoe(myArray));
3. 编辑任意Shoes实例
通过名称定位实例后修改属性:
function editShoe(arr, targetName, newProps) { const shoe = arr.find(shoe => shoe.Name === targetName); if(shoe) { Object.assign(shoe, newProps); return true; // 编辑成功 } return false; // 未找到目标实例 } // 示例:修改Nike的库存和单价 editShoe(myArray, "Nike", { Quantity: 600, ValuePerItem: 2200 }); console.log(myArray.find(s => s.Name === "Nike"));
4. 数组按升序排序
支持按不同属性排序,以下是两种常用场景:
// 按单价升序排序(不修改原数组) function sortShoesByValueAsc(arr) { return arr.slice().sort((a, b) => a.ValuePerItem - b.ValuePerItem); } // 按名称字母升序排序(不修改原数组) function sortShoesByNameAsc(arr) { return arr.slice().sort((a, b) => a.Name.localeCompare(b.Name)); } console.log("按单价升序排序结果:", sortShoesByValueAsc(myArray));
完整整合代码
let myArray =[]; class Shoes{ constructor(Name, ProductCode, Quantity, ValuePerItem){ this.Name = Name; this.ProductCode = ProductCode; this.Quantity = Quantity; this.ValuePerItem = ValuePerItem; }; } const shoe1 = new Shoes("Nike", "001", 500, 2000); const shoe2 = new Shoes("Puma", "002", 1000, 1500); const shoe3 = new Shoes("Adidas", "003", 250, 3000); const shoe4 = new Shoes("Reebok", "004", 2500, 1000); const shoe5 = new Shoes("Gucci", "005", 100, 5000); myArray.push(shoe1, shoe2, shoe3, shoe4, shoe5); // 查找功能 const findShoe = (arr, shoeName) => arr.some(shoe => shoe.Name === shoeName); console.log("Nike是否存在:", findShoe(myArray, "Nike")); // 最值查找功能 const findMaxValueShoe = arr => arr.reduce((max, curr) => curr.ValuePerItem > max.ValuePerItem ? curr : max, arr[0]); const findMinValueShoe = arr => arr.reduce((min, curr) => curr.ValuePerItem < min.ValuePerItem ? curr : min, arr[0]); console.log("单价最高:", findMaxValueShoe(myArray)); console.log("单价最低:", findMinValueShoe(myArray)); // 编辑功能 function editShoe(arr, targetName, newProps) { const shoe = arr.find(shoe => shoe.Name === targetName); if(shoe) { Object.assign(shoe, newProps); return true; } return false; } editShoe(myArray, "Nike", { Quantity: 600, ValuePerItem: 2200 }); console.log("修改后的Nike:", myArray.find(s => s.Name === "Nike")); // 排序功能 const sortShoesByValueAsc = arr => arr.slice().sort((a, b) => a.ValuePerItem - b.ValuePerItem); console.log("按单价升序排序:", sortShoesByValueAsc(myArray));
内容的提问来源于stack exchange,提问作者JadenBotha
相关产品推荐
相关产品推荐

