Javascript 用新名称替换所有对象属性
我想将所有对象属性Javascript 用新名称替换所有对象属性,javascript,arrays,typescript,object,Javascript,Arrays,Typescript,Object,我想将所有对象属性标签替换为属性名称文本 鉴于: [ { "value": "45a8", "label": "45A8", "children": [ { "value": "45a8.ba08", "label": "BA08",
标签
替换为属性名称文本
鉴于:
[
{
"value": "45a8",
"label": "45A8",
"children": [
{
"value": "45a8.ba08",
"label": "BA08",
"children": [
{
"value": "45a8.ba08.45a8",
"label": "45A8"
}
],
"checked": false
}
]
},
...
]
需要:
[
{
"value": "45a8",
"text": "45A8",
"children": [
{
"value": "45a8.ba08",
"text": "BA08",
"children": [
{
"value": "45a8.ba08.45a8",
"text": "45A8"
}
],
"checked": false
}
]
},
...
]
您可以首先使用字符串化数据,然后替换字符串。最后,使用以下命令解析字符串:
var数据=[
{
“值”:“45a8”,
“标签”:“45A8”,
“儿童”:[
{
“值”:“45a8.ba08”,
“标签”:“BA08”,
“儿童”:[
{
“值”:“45a8.ba08.45a8”,
“标签”:“45A8”
}
],
“选中”:false
}
]
}
];
data=JSON.parse(JSON.stringify(data.replaceAll)('label','text');
控制台日志(数据)
您也可以使用递归来实现这一点。可能是这样的:
const nestArr=[{“value”:“45a8”,“label”:“45a8”,“children”:[{“value”:“45a8.ba08”,“label”:“ba08”,“children”:[{“value”:“45a8.ba08.45a8”,“label”:“45a8”}],“checked”:“false}];
changeLabelToText=arr=>{
返回arr.map(({label,…rest})=>{
if(rest.children)rest.children=changeLabelToText(rest.children);
返回{text:label,…rest}
})
};
console.log(changelabletext(nestArr))代码>您还可以浏览键并找到标签键。获取其值将其分配给新键(即文本),并删除旧键(即标签)
let data = [
{
"value": "45a8",
"label": "45A8",
"children": [
{
"value": "45a8.ba08",
"label": "BA08",
"children": [
{
"value": "45a8.ba08.45a8",
"label": "45A8"
}
],
"checked": false
}
]
}
]
for (const key in data.keys()){
if(key === "label"){
data.text = data[key]
delete data.key
}
}
我已经试过了,但这并没有改变子元素的属性。@mrks,使用replaceAll()
而不是replace()
,请检查更新的答案:)感谢快速更改,但是replaceAll
在类型string
上不存在。@mrks,您可以在更新的答案中使用regex尝试第二种解决方案:)