如何给JavaScript array.every的箭头函数回调传递参数?
问题原因
Array.every()的第二个参数是用来指定回调函数执行时的this上下文,并非直接传递给回调的参数。同时你的回调函数参数顺序有误:every给回调传入的参数依次是数组元素、索引、原数组,所以你定义的args实际拿到的是数组元素的索引值,而非你传入的'value A'/'value B'。
解决方法
以下是三种可行的实现方式:
方法1:闭包工厂函数
通过工厂函数生成绑定了目标参数的回调,逻辑清晰且复用性强:
const sampleArray = [5, 3, 4, 6, 7]; // 生成带指定参数的回调函数 const createProcessedHandler = (targetArg) => { return (value) => { console.log('manoj', targetArg); if (targetArg === 'value A') { // 执行对应逻辑 return true; // every要求返回布尔值,需根据实际逻辑调整 } else if (targetArg === 'value B') { // 执行对应逻辑 return true; } return false; }; }; // 调用方式 sampleArray.every(createProcessedHandler('value A')); sampleArray.every(createProcessedHandler('value B'));
方法2:Function.bind()绑定参数
通过bind提前绑定目标参数,注意调整回调的参数顺序:
const sampleArray = [5, 3, 4, 6, 7]; // 把目标参数放在参数列表最前面 function getProcessedData(targetArg, value) { console.log('manoj', targetArg); if (targetArg === 'value A') { // 执行对应逻辑 return true; } else if (targetArg === 'value B') { // 执行对应逻辑 return true; } return false; }; // 用bind绑定第一个参数,null表示不需要指定this sampleArray.every(getProcessedData.bind(null, 'value A')); sampleArray.every(getProcessedData.bind(null, 'value B'));
方法3:箭头函数中转
直接在every调用中用箭头函数包装,手动传递目标参数:
const sampleArray = [5, 3, 4, 6, 7]; const getProcessedData = (value, targetArg) => { console.log('manoj', targetArg); if (targetArg === 'value A') { // 执行对应逻辑 return true; } else if (targetArg === 'value B') { // 执行对应逻辑 return true; } return false; }; // 用箭头函数中转参数 sampleArray.every(value => getProcessedData(value, 'value A')); sampleArray.every(value => getProcessedData(value, 'value B'));
注意事项
Array.every()要求回调函数返回布尔值:返回true表示当前元素符合条件,继续遍历;返回false则立即终止遍历。原代码中的return;会被视为返回undefined,等同于false,需根据实际业务逻辑调整返回值。
内容的提问来源于stack exchange,提问作者Manoj G
相关产品推荐
相关产品推荐

