Обмен ключом со значением - PullRequest
1 голос
/ 24 марта 2020

Я новичок в JavaScript и пытаюсь заменить один ключ на его значение. Но оператор удаления, похоже, на самом деле не удаляет часть. Я, вероятно, делаю это неэффективным способом, но, пожалуйста, объясните, почему удаление работает, но нет? И как добавить это обменное значение обратно. Заранее спасибо.

function swapKeyAndValue(obj,key)
{
  for(let x of Object.keys(obj))
  {
    if (x == key){
      console.log(obj);
      let tempkey = x; //where tempkey is the key: name
      let tempval = obj[x]; //where tempval is  value:ellie
      delete obj.x;
      console.log(obj.x); //outputs undefined
      console.log(obj); //outputs the obj with the deleted value?
      console.log(obj.x); //outputs undefined
      obj.tempkey=tempval;
      //console.log(obj);
    }

  }
}
var instructor = { name: 'Elie', job: 'Instructor' };
swapKeyAndValue(instructor, 'name');
// {Elie: 'name', job: "Instructor"}

Ответы [ 3 ]

2 голосов
/ 24 марта 2020

Вам не нужно использовать Object.keys для замены одного значения ключа. Для этого вы можете использовать скобки [].

function swapKeyAndValue(obj,key)
{
  let value=obj[key]
  obj[value]=key;
  delete obj[key];
  console.log(obj);
}
var instructor = { name: 'Elie', job: 'Instructor' };
swapKeyAndValue(instructor, 'name');
// {Elie: 'name', job: "Instructor"}
1 голос
/ 24 марта 2020

Неизменный подход:


Если это не требуется неявно, я бы избежал изменения вашего исходного объекта.

Вместо этого

  • вы можете деструктурировать ваш исходный объект в целевой ключ и ...rest ключей
  • , а затем просто вернуть мелкий копия исходного объекта с измененным целевым ключом / значением:

const instructor = { name: 'Elie', job: 'Instructor' },

      swapKeyAndValue = (obj,key) => {
        const {[key]:k, ...rest} = obj
        return {...rest, [obj[key]]: key}
     }
               
console.log(swapKeyAndValue(instructor, 'name'))
.as-console-wrapper{min-height:100%;}
0 голосов
/ 24 марта 2020

Вы можете объединить Object.entries с reduce следующим образом:

const instructor = { name: 'Elie', job: 'Instructor' };

const reversed = Object.entries(instructor)
  .reduce((acc, [key, value]) => ({
    ...acc,
    [value]: key
  }), {});

console.log(reversed);

Или обычный старый JS:

var instructor = { name: 'Elie', job: 'Instructor' };

var reversed = {}

for(var key in instructor) {
  reversed[instructor[key]] = key;
}

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