Gibt es eine clevere (d.h. optimierte) Möglichkeit, einen Schlüssel in einem Javascript-Objekt umzubenennen?
Ein nicht optimierter Weg wäre:
o[ new_key ] = o[ old_key ];
delete o[ old_key ];
Gibt es eine clevere (d.h. optimierte) Möglichkeit, einen Schlüssel in einem Javascript-Objekt umzubenennen?
Ein nicht optimierter Weg wäre:
o[ new_key ] = o[ old_key ];
delete o[ old_key ];
Für den Fall, dass jemand einen Schlüssel eines Objekts umbenennen muss:
const renameKeyObject = (obj, oldKey, newKey) => {
if (oldKey === newKey) return obj;
Object.keys(obj).forEach((key) => {
if (key === oldKey) {
obj[newKey] = obj[key];
delete obj[key];
} else if (obj[key] !== null && typeof obj[key] === "object") {
obj[key] = renameKeyObject(obj[key], oldKey, newKey);
}
});
return obj;
};
Sie können ein Dienstprogramm verwenden, um dies zu erledigen.
npm i paix
import { paix } from 'paix';
const source_object = { FirstName: "Jhon", LastName: "Doe", Ignored: true }; const replacement = { FirstName: 'first_name', LastName: 'last_name' }; const modified_object = paix(source_object, replacement);
console.log(modified_object); // { Ignored: true, first_name: 'Jhon', last_name: 'Doe' };
Ihr Weg ist meiner Meinung nach optimiert. Aber Sie werden am Ende mit neu geordneten Schlüsseln dastehen. Der neu erstellte Schlüssel wird am Ende angehängt. Ich weiß, dass Sie sich nie auf die Schlüsselreihenfolge verlassen sollten, aber wenn Sie sie beibehalten wollen, müssen Sie alle Schlüssel durchgehen und ein neues Objekt nach dem anderen erstellen, wobei der betreffende Schlüssel während dieses Prozesses ersetzt wird.
Zum Beispiel so:
var new_o={};
for (var i in o)
{
if (i==old_key) new_o[new_key]=o[old_key];
else new_o[i]=o[i];
}
o=new_o;
Dies ist eine kleine Änderung, die ich an der Funktion von pomber vorgenommen habe; Um in der Lage zu sein, ein Array von Objekten anstelle eines Objekts allein zu nehmen und auch den Index zu aktivieren. Auch die "Keys" können durch ein Array zugewiesen werden
function renameKeys(arrayObject, newKeys, index = false) {
let newArray = [];
arrayObject.forEach((obj,item)=>{
const keyValues = Object.keys(obj).map((key,i) => {
return {[newKeys[i] || key]:obj[key]}
});
let id = (index) ? {'ID':item} : {};
newArray.push(Object.assign(id, ...keyValues));
});
return newArray;
}
Test
const obj = [{ a: "1", b: "2" }, { a: "5", b: "4" } ,{ a: "3", b: "0" }];
const newKeys = ["A","C"];
const renamedObj = renameKeys(obj, newKeys);
console.log(renamedObj);
CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.