Как заменить ключ в объекте правильно?
Подскажите плз., как заменить dirName на условно newName?
var options = {
"dirName": {
"pages": 2,
"template": {
"html": "templates/some.html",
"styles": [
"css/some.css"
],
"script": "js/default.js",
"sounds": {
"start": "sounds/start.mp3",
"end": "sounds/end.mp3"
}
}
},
"theSome": {
"downloadURL": "some.pdf"
}
}
Ответы (1 шт):
Автор решения: De.Minov
→ Ссылка
Как сказал Grundy
никак. в объекте нельзя изменять ключи
Но мы можем перенести значения старых данных в новый ключ и удалить старый:
options.newName = options.dirName; // "Копируем" старые данные в новый ключ
delete options.dirName; // Удаляем ключ
var options = {
"dirName": {
"pages": 2,
"template": {
"html": "templates/some.html",
"styles": [
"css/some.css"
],
"script": "js/default.js",
"sounds": {
"start": "sounds/start.mp3",
"end": "sounds/end.mp3"
}
}
},
"theSome": {
"downloadURL": "some.pdf"
}
};
// REPLACE KEY
options.newName = options.dirName;
delete options.dirName;
console.info(options);
Либо можно написать функцию, для замены имён, если такое выполнять придётся чаще.
Написано под ES6
function RenameKey(o, old_key, new_key) {
if(old_key !== new_key) {
Object.defineProperty(o, new_key, Object.getOwnPropertyDescriptor(o, old_key));
delete o[old_key];
}
}
var options = {
"dirName": {
"pages": 2,
"template": {
"html": "templates/some.html",
"styles": [
"css/some.css"
],
"script": "js/default.js",
"sounds": {
"start": "sounds/start.mp3",
"end": "sounds/end.mp3"
}
}
},
"theSome": {
"downloadURL": "some.pdf"
}
}
RenameKey(options, 'dirName', 'newName');
console.info(options);