You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何实现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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.24 18:47:04