wake-up-neo.com

Ändern Sie den Objektschlüssel mit Object.keys ES6

Ich habe 

var tab = {
abc:1,
def:40,
xyz: 50
}

Ich möchte den Namen von abc, def, xyz in etwas anderes ändern, ist das möglich?

Ich habe es versucht

const test = Object.keys(tab).map(key => {
  if (key === 'abc') {
    return [
      a_b_c: tab[key]
    ]
  }
});

console.log(test);

Ich habe viele undefinierte Schlüssel.

9
Alan Jenshen

So habe ich es gelöst. Ich habe eine Map verwendet, um eine Zuordnung zwischen dem vorhandenen und einem neuen Schlüssel vorzunehmen. Ersetzen Sie die Karte einfach durch die neuen Werte, die Sie benötigen. Entfernen Sie schließlich die vorherigen Schlüssel aus dem Objekt mit omit.

var tab = {
  abc:1,
  def:40,
  xyz: 50
}

var map = {
    abc : "newabc",
    def : "newdef",
    xyz : "newxyz"
}


_.each(tab, function(value, key) {
    key = map[key] || key;
    tab[key] = value;
});


console.log(_.omit(tab, Object.keys(map)));
1

Hier ist der vollständige Code zum Ersetzen von Schlüsseln basierend auf einem Objekt, das die zu ersetzenden Werte abbildet:

const tab = {abc: 1, def: 40, xyz: 50};
const replacements = {'abc': 'a_b_c', 'def': 'd_e_f'};

let replacedItems = Object.keys(tab).map((key) => {
  const newKey = replacements[key] || key;
  return { [newKey] : tab[key] };
});

Dadurch wird ein Array mit drei Objekten ausgegeben, bei denen Schlüssel ersetzt werden. Wenn Sie daraus ein neues Objekt erstellen möchten, gehen Sie einfach wie folgt vor:

const newTab = replacedItems.reduce((a, b) => Object.assign({}, a, b));

Dies gibt aus: {"a_b_c": 1, "d_e_f": 40, "xyz": 50}

5
zvona

Mit lodash mapKeys - Funktion lassen sich Objektschlüssel ganz einfach umwandeln.

let tab = {
  abc: 1,
  def: 40,
  xyz: 50
}

const map = {
  abc: "newabc",
  def: "newdef",
  xyz: "newxyz"
}

// Change keys
_.mapKeys(tab, (value, key) => {
  return map[value];
});

// -> { newabc: 1, newdef: 40, newxyz: 50 }
3
Mohan Dere

Hier ist eine Möglichkeit, die Zuordnungs- und Pfeilfunktionen zu dekonstruieren.

const rename = (({abc: a_b_c, ...rest}) => ({a_b_c, ...rest}))
console.log(rename({abc: 1, def: 2}))
// { "a_b_c": 1, "def": 2 }
1
Clemens

Mit lodash ist das einfach.

import { mapKeys } from 'lodash';    

const tab = {
    abc: 1,
    def: 40,
    xyz: 50
};

const test = mapKeys(tab, (value, key) => {
    if (key === 'abc') return 'a_b_c';
    return key;
});
1

Sie können den neuen Schlüssel hinzufügen und den alten löschen.

var tab = {
abc:1,
def:40,
xyz: 50
}

    var key = 'abc'
    console.log(key)
    tab['a_b_c'] = tab[key]
    delete tab[key]
    
 
console.log(tab);
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react-dom.min.js"></script>

0
Shubham Khatri

Der kürzeste Weg, den ich bisher gefunden habe:

const tab = {abc: 1, def: 40, xyz: 50};

const {'abc': 'a_b_c', 'def': 'd_e_f', ...rest} = tab;
tab = {'a_b_c', 'd_e_f', ...rest}
0
Jeff Lowery

Hatte gerade einen ähnlichen Anwendungsfall und konnte ihn lösen.

const options = {
  method: "POST", // *GET, POST, PUT, DELETE, etc.
  ...
  body: JSON.stringify({}) // body data type must match "Content-Type" header
}

window.fetch(url,{
...options,
...{ method: "PUT", body: JSON.stringify(plot) }
})
0
Matthis Kohli