根据映射对象更新数组:替换finalArr的REQUEST_TYPE为对应数值
解决对象数组属性值按映射替换的问题
需求
有一个对象数组finalArr和映射对象replaceJsonData,当replaceJsonData中存在add:1的映射规则时,将finalArr里元素的REQUEST_TYPE值替换为1。
初始数据
finalArr = [{ REQUEST_TYPE: 'add', TIMESTAMP: '1671636661867', }, ] let replaceJsonData = { "REQUEST_TYPE": { 'add': 1, 'modify': 2 } }
问题代码
之前尝试的写法错误地直接将整个映射对象赋值给属性,没有根据元素当前的属性值匹配对应映射:
finalArr.map((ele)=>{ Object.entries(replaceJsonData ).forEach( ([replaceDataKey, replaceDataValue]) => { if (ele[replaceDataKey]) { ele[replaceDataKey]=replaceDataValue } } ) });
正确解法
通用版(支持多属性映射)
遍历数组元素,针对每个属性对应的映射表,用元素当前的属性值作为键去匹配映射值:
finalArr.forEach(ele => { Object.entries(replaceJsonData).forEach(([propName, valueMap]) => { if (ele[propName] in valueMap) { ele[propName] = valueMap[ele[propName]]; } }); });
简化版(仅处理REQUEST_TYPE)
如果只需要处理REQUEST_TYPE这一个属性,可以直接定位到对应的映射表:
finalArr.forEach(ele => { const typeMap = replaceJsonData.REQUEST_TYPE; if (typeMap.hasOwnProperty(ele.REQUEST_TYPE)) { ele.REQUEST_TYPE = typeMap[ele.REQUEST_TYPE]; } });
执行后结果
finalArr = [{ REQUEST_TYPE: 1, TIMESTAMP: '1671636661867', }, ]
内容的提问来源于stack exchange,提问作者Nishant
相关产品推荐
相关产品推荐

