如何将数组中与对象键完全匹配的元素替换为对应键值?
问题修正:数组元素与对象键完全匹配时替换为对应值
问题分析
当前代码的问题出在matchedKey函数中:你用Object.keys(Obj).map遍历对象的所有键,这会返回一个数组,导致外层Arr.map将原数组的每个元素都转换成数组,最终得到二维结果,不符合预期。
我们需要的逻辑是:对数组中的每个元素,判断它是否是对象的键,是则替换为对应值,否则保留原元素。
修正后的代码
function test() { let Arr = [ 'Saturday', 'niCCCght', 'plans,', 'CCC' ]; const Obj = {"AAA":"BBB", "CCC":"DDD","EEE":"FFF"}; const Z = Arr.map(v => matchedKey(Obj, v)) console.log(Z); // 输出:[ 'Saturday', 'niCCCght', 'plans,', 'DDD' ] } let matchedKey = (Obj, str) => Obj.hasOwnProperty(str) ? Obj[str] : str;
关键修改说明
- 替换
matchedKey的实现逻辑:用Obj.hasOwnProperty(str)检查当前字符串是否是对象的自有键(避免原型链上的键干扰) - 匹配成功时返回对应的值
Obj[str],否则返回原字符串str - 这样
matchedKey返回单个值,外层Arr.map处理后得到一维数组,完全符合期望输出
内容的提问来源于stack exchange,提问作者Einarr
相关产品推荐
相关产品推荐

