用值交换键

Swapping key with value

我是 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"}

您不需要使用 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"}

您可以这样组合 Object.entries with 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);

不可变方法:


如果这不是隐含的要求,我会避免改变您的源对象。

相反,

  • 您可以 destructure 将您的源对象转换为目标键和键的 ...rest
  • 然后简单地 return 源对象的浅拷贝与目标 key/value 交换:

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