469 Stimmen

JavaScript: Objekt Umbenennen Taste

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 ];

2voto

张焱伟 Punkte 51

Hier ist ein Beispiel für die Erstellung eines neuen Objekts mit umbenannten Schlüsseln.

let x = { id: "checkout", name: "git checkout", description: "checkout repository" };

let renamed = Object.entries(x).reduce((u, [n, v]) => {
  u[`__${n}`] = v;
  return u;
}, {});

2voto

Oussama Filani Punkte 101

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;
};

1voto

Muhammed Moussa Punkte 3282
  • 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' };

1voto

Tomas M Punkte 5961

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;

1voto

Jasp402 Punkte 333

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.com

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.

Powered by:

X