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

为何将查找值设为变量后array.find()返回undefined?

问题原因与解决方案

问题根源

event.target.dataset.id 获取到的是字符串类型的值,而数组中 product.id 是数字类型。你使用的严格相等运算符 === 会同时比较值和类型,字符串'1'和数字1类型不匹配,导致匹配失败返回undefined。而直接写数值1时,类型和product.id一致,所以能正常匹配。

解决方案

以下几种方法都能实现动态匹配:

方法1:将idToFind转换为数字类型(推荐)

把从dataset获取的字符串转为数字,再用严格相等比较:

addToCartButtons.forEach(button => {
    button.addEventListener('click', (event) => {
        // 转数字的几种方式任选一种:Number() / parseInt() / +变量
        const idToFind = Number(event.target.dataset.id);
        let array = [{id: 1, name: 'mattia'}, {id: 2, name: 'cesare'}];
        
        function findProd(product) {
            return product.id === idToFind;
        }
        
        const result = array.find(findProd);
        console.log(result);
    })
});

方法2:使用宽松相等运算符==

宽松相等会自动转换类型进行比较,但不如严格相等严谨,仅作备选:

function findProd(product) {
    return product.id == idToFind;
}

方法3:简化为箭头函数写法

直接在find方法里写逻辑,更简洁:

addToCartButtons.forEach(button => {
    button.addEventListener('click', (event) => {
        const idToFind = Number(event.target.dataset.id);
        let array = [{id: 1, name: 'mattia'}, {id: 2, name: 'cesare'}];
        
        const result = array.find(product => product.id === idToFind);
        console.log(result);
    })
});

内容的提问来源于stack exchange,提问作者SUPERPUGN0

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 00:09:22