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

JavaScript如何改造函数支持未知数量入参,动态修改返回函数的表达式

支持多属性参数的 trackByProp 函数实现

核心实现思路

你示例中写的外层forEach逻辑没有必要,因为返回的函数只有在实际调用时才会拿到value参数,提前操作无法关联到后续传入的value。
不需要动态修改返回函数的表达式,利用JS闭包特性,返回的内部函数可以直接访问外层传入的props参数数组,在内部遍历数组完成属性取值、运算即可。

完整实现代码

function trackByProp(...props) {
  return function (value) {
    // 场景1:将所有属性值拼接为字符串(对应你示例中的+拼接需求)
    return props.map(prop => value[prop]).join('');

    // 场景2:属性值为数值,需要返回累加和
    // return props.reduce((total, prop) => total + (value[prop] ?? 0), 0);

    // 场景3:返回所有属性值组成的数组
    // return props.map(prop => value[prop]);
  };
}

更简洁的写法

用箭头函数可以进一步简化代码,以拼接字符串的场景为例,还可以额外增加可选链、空值合并逻辑,避免属性不存在时报错:

const trackByProp = (...props) => value => props.map(p => value?.[p] ?? '').join('');

使用示例

// 传入需要拼接的两个属性
const trackByIdAndName = trackByProp('id', 'name');
// 调用返回的函数取值
console.log(trackByIdAndName({id: 101, name: '测试'})); // 输出:101测试

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 07:45:03