Как заменить все имена свойств объекта json - PullRequest
0 голосов
/ 25 марта 2020

Я хотел бы изменить все имена свойств json объекта

const obj = {
  "key1": "Value1",
  "key2": "Value2",
  "key3": "Value3"
}

// I would like to have something like this : 

obj = {
  "renamedKey1": "Value1",
  "renamedKey2": "Value2",
  "renamedKey3": "Value3"
}

Извините, я должен был быть более точным c, но имена свойств не совпадают в все.

Например ...

const obj = {
  "country": "Value1",
  "area": "value2",
  "color_flag": "value3"
}

// I would like to have something like this : 

obj = {
  "pays": "Value1",
  "superficie": "Value2",
  "couleur_drapeau": "Value3"
}

Заранее спасибо

Ответы [ 4 ]

1 голос
/ 25 марта 2020

Вы можете захватить все объекты и затем .map() их к новым парам [key, value] записей (с переименованным key). Затем используйте Object.fromEntries(), чтобы построить для вас новый объект из записей:

const obj = {
  "key1": "Value1",
  "key2": "Value2",
  "key3": "Value3"
}

const res = Object.fromEntries(Object.entries(obj).map(([k, v]) => ['renamed'+k, v]));
console.log(res);

Если вы не можете поддерживать Object.fromEntries (), вы можете использовать Object.assign() в качестве альтернативы путем сопоставления Ваши записи для объектов:

const obj = {
  "key1": "Value1",
  "key2": "Value2",
  "key3": "Value3"
}

const res = Object.assign({}, ...Object.keys(obj).map(k => ({['renamed'+k]: obj[k]})));
console.log(res);
0 голосов
/ 25 марта 2020

Похоже, вы пытаетесь перевести ключи (с английского sh на французский).

Я бы порекомендовал какую-то таблицу перевода. Это очень простой пример

const obj = {
  "country": "Value1",
  "area": "value2",
  "color_flag": "value3"
}

const i18n = {
  fr: {
    country: 'pays',
    area: 'superficie',
    color_flag: 'couleur_drapeau'
  }
}

const translateKeys = (obj, lang) => Object.entries(obj).reduce((tr, [ key, val ] ) => ({
  ...tr,
  [i18n[lang] && i18n[lang][key] || key]: val
}), {})

console.info(translateKeys(obj, 'fr'))

Создает новый объект, беря ключи, выполняя поиск в таблице перевода и присваивая их с соответствующими значениями литералу нового объекта. Если ключ языка или перевода не найден, используется исходный ключ объекта.

0 голосов
/ 25 марта 2020

Попробуйте это.

for (let [key, value] of Object.entries(obj)) {
      obj[key] = 'renamedKey1'
   }
}

Хотя не рекомендуется изменять значение json. Вы можете создать копию этого объекта и работать с ним.

let newObj = {}
let i = 0
for (let [key, value] of Object.entries(obj)) {
      newObj['renamedKey' + i] = value;
      i++
   }
}
0 голосов
/ 25 марта 2020

В современных браузерах проверьте Object.entries:

const newObj = {};
for (const [key, value] of Object.entries(originalObj)) {
  newObj['renamed' + key] = value;
}
...