Как заменить ключ объекта на соответствующее значение ключа из другого объекта - PullRequest
5 голосов
/ 17 мая 2019

У меня есть объект:

{pm: 'val 1', dm: 'val 2', cm: 'val 3'}

, и я хочу пройтись по нему и проверить, присутствует ли какой-либо из ключей в другом объекте,

, еслизатем они заменяют ключ соответствующим значением ключа из другого объекта.

{pm: 'price', dm: 'discount', cm: 'cost'}

Ожидаемый результат будет:

{price: 'val 1', discount: 'val 2', cost: 'val 3'

Ответы [ 9 ]

2 голосов
/ 17 мая 2019

Вы можете использовать reduce, проверить наличие ключа в другом объекте и затем добавить значение из anotherObj в качестве ключа в конечном объекте

let obj = {pm: 'val 1', dm: 'val 2', cm: 'val 3', 'xy':'val 4'}
let anotherObj = {pm: 'price', dm: 'discount', cm: 'cost'}

let final = Object.entries(obj).reduce((op, [key,value]) => {
  let newKey = anotherObj[key]
  op[newKey || key ] = value
  return op
},{})

console.log(final)
2 голосов
/ 17 мая 2019

Это самый эффективный способ сделать это.Проверьте выполнение всех вышеуказанных ответов здесь .

var obj1 = {pm: 'val 1', dm: 'val 2', cm: 'val 3', mm: 'val 4'};
var obj2 = {pm: 'price', dm: 'discount', cm: 'cost'};
var output = {};

for(var key in obj1){
  if(obj2[key]){
    output[obj2[key]] = obj1[key];
  } else {
    output[key] = obj1[key];
  }
};

console.log(output)
1 голос
/ 17 мая 2019

Вы можете получить доступ и определить ключи с помощью синтаксиса obj [key].Ниже показано, как код перебирает obj2 и, если он совпадает, создает новый узел в res со значением из obj2[key] в качестве ключа (res[obj2[key]]).Я добавил дополнительный ключ mm, чтобы вы могли видеть, что происходит, когда он не совпадает.

const obj1 = {pm: 'val 1', dm: 'val 2', cm: 'val 3', mm: 'val 4'};
const obj2 = {pm: 'price', dm: 'discount', cm: 'cost'};
const res = {};

for(let key in obj1){
  if(obj2[key]){
    res[obj2[key]] = obj1[key];
  } else {
    res[key] = obj1[key];
  }
};

console.log(res);

Надеюсь, это поможет!

1 голос
/ 17 мая 2019

Этого можно добиться с помощью Object.keys и Array.reduce в краткой форме, например:

let vals = {pm: 'val 1', dm: 'val 2', cm: 'val 3'}
let keys = {pm: 'price', dm: 'discount', cm: 'cost'}

let result = Object.keys(keys).reduce((r,k) => (r[keys[k]] = vals[k]) && r, {})

console.log(result)
1 голос
/ 17 мая 2019

Вы можете преобразовать ключевой объект в массив, используя Object.entries, и выполнить цикл по массиву, используя reduce

var val = {"pm":"val 1","dm":"val 2","cm":"val 3"};
var key = {"pm":"price","dm":"discount","cm":"cost"};

var result = Object.entries(key).reduce((c, [v, k]) => Object.assign(c, {[k]: val[v] || null}), {});

console.log(result)
1 голос
/ 17 мая 2019

Вы можете сделать это в следующих шагах:

  • Получить записи первого объекта, используя Object.entries()
  • Используйте map() для массива записей.
  • В карте проверьте, присутствует ли текущий ключ во втором объекте, затем верните запись с измененным ключом, в противном случае тот же самый.
  • Наконец, используйте Object.fromEntries(), чтобы получить объект.

const obj1 = {pm: 'val 1', dm: 'val 2', cm: 'val 3'}
const obj2 = {pm: 'price', dm: 'discount', cm: 'cost'}

const res = Object.fromEntries(
                Object.entries(obj1)
                     .map(([k,v]) => [(obj2[k] || k), v])
            )

console.log(res)
1 голос
/ 17 мая 2019

Используйте reduce с Object.entries:

const obj1 = {pm: 'val 1', dm: 'val 2', cm: 'val 3'};
const obj2 = {pm: 'price', dm: 'discount', cm: 'cost'};
const res = Object.entries(obj1).reduce((acc, [k, v]) => ({ ...acc, [obj2[k] || k]: v }), {});
console.log(res);
0 голосов
/ 17 мая 2019

Очень прямой путь:

let obj = {pm: 'val 1', dm: 'val 2', cm: 'val 3'};
let otherObj = { dm: 'val 9'}

for(let key in obj){
  if(otherObj[key] != null) {
     obj[key] = otherObj[key]
  }
}
0 голосов
/ 17 мая 2019

Вы можете попробовать код

const obj1 = {pm: 'val 1', dm: 'val 2', cm: 'val 3'},
  obj2 = {pm: 'price', dm: 'discount', cm: 'cost'},
  obj = {};
Object.keys(obj2).forEach( key2 => {
   Object.keys(obj1).forEach( key1 => {
      if (key2 === key1) {
        obj[obj2[key2]] = obj1[key1]
      }
   });
 });
console.log(obj)

Это демо https://codepen.io/phuongnm153/pen/PvmeEN

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...