阅读:3199回复:0
js 更改对象中的属性名
网上大多是利用JSON转为字符串再进行替换修改属性名
var bbb = JSON.parse(JSON.stringify(aaa).replace(/Name/g,"title")); 这样做会有2个缺点, 1.如果属性值匹配到会被更改 2.属性名中有部分匹配到也会被更改 如下: var aaa = [ { Name:"test1Name", type: "test", }, { Name:"test2", model: "model2" } ] var bbb = JSON.parse(JSON.stringify(aaa).replace(/Name/g,"title")); 结果如下,属性值也被修改。 不改变键值也不匹配部分键名只匹配你要改的键名 var aaa = [ { Name:"test1Name", type: "test", }, { Name:"test2", model: "model2" } ] var copyTrans = function(obj, typeArr) { let result; let toString = Object.prototype.toString; if(toString.call(obj) === '[object Array]'){ result = []; for(let i = 0; i < obj.length; i++){ result = copyTrans(obj, arguments[1]) } }else if(toString.call(obj) === '[object Object]'){ result = {}; for (let _key in obj) { if (obj.hasOwnProperty(_key)) { let flag = 0, _value = null; for (let j = 0; j < arguments[1].length; j ++) { if (arguments[1][j].key === _key) { flag = 1; _value = arguments[1][j].value } } if (flag) result[_value] = copyTrans(obj[_key], arguments[1]) else result[_key] = copyTrans(obj[_key], arguments[1]) } } }else{ return obj } return result }; //将aaa对象中的type键改为chilren、model键改为chilren console.log(copyTrans(aaa, [{ key: "type", value: "chilren" }, { key: "model", value: "chilren" }])); 函数第一个参数是要修改的对象,第二个参数传数组 key为要被改的属性名, value为改成的属性名。 函数本身是一个深拷贝,通过对其每层中对象的“键”做匹配替换即实现了多层的“键”替换,另外这里如果传空数组此函数就是一个深拷贝。 ———————————————— 版权声明:本文为CSDN博主「dk123sw」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。 原文链接:https://blog.csdn.net/dk123sw/article/details/96875061 |
|