#javascript #arrays #typescript #object
#javascript #массивы #typescript #объект
Вопрос:
Я хочу заменить все свойства объекта label
на имя свойства text
.
Учитывая:
[
{
"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
}
]
},
...
]
Ответ №1:
Вы можете сначала упорядочить данные JSON.stringify()
, а затем заменить строку. Наконец, проанализируйте строку с помощью JSON.parse()
:
var data = [
{
"value": "45a8",
"label": "45A8",
"children": [
{
"value": "45a8.ba08",
"label": "BA08",
"children": [
{
"value": "45a8.ba08.45a8",
"label": "45A8"
}
],
"checked": false
}
]
}
];
data = JSON.parse(JSON.stringify(data).replaceAll('"label"', '"text"'));
console.log(data);
Обновление: вы можете попробовать использовать регулярное выражение следующим образом:
var data = [
{
"value": "45a8",
"label": "45A8",
"children": [
{
"value": "45a8.ba08",
"label": "BA08",
"children": [
{
"value": "45a8.ba08.45a8",
"label": "45A8"
}
],
"checked": false
}
]
}
];
var find = '"label"';
var re = new RegExp(find, 'g');
data = JSON.parse(JSON.stringify(data).replace(re, '"text"'));
console.log(data);
Комментарии:
1. Я уже пробовал это, но это не изменяет свойство дочерних элементов.
2. @mrks, используйте
replaceAll()
вместоreplace()
, пожалуйста, проверьте обновленный ответ 🙂3. Спасибо за быстрое изменение, но
replaceAll
, к сожалению, не существует в typestring
.4. @mrks, вы можете попробовать второе решение, используя регулярное выражение в обновленном ответе 🙂
Ответ №2:
Вы также можете просмотреть ключи и найти ключ метки. Получите его значение, присвоите его новому ключу, то есть тексту, и удалите старый ключ, то есть метку.
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
}
}
Ответ №3:
Вы также можете сделать это с помощью recursion
. Это может быть что-то вроде этого:
const nestArr=[ { "value": "45a8", "label": "45A8", "children": [ { "value": "45a8.ba08", "label": "BA08", "children": [ { "value": "45a8.ba08.45a8", "label": "45A8" } ], "checked": false } ] }];
changeLabelToText=arr=>{
return arr.map(({label,...rest})=>{
if(rest.children) rest.children = changeLabelToText(rest.children);
return {text:label, ...rest}
})
};
console.log(changeLabelToText(nestArr));