【问题标题】:Swapping key with value用值交换键
【发布时间】:2020-03-25 03:26:15
【问题描述】:

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

【问题讨论】:

标签: javascript object key-value


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    不可变方法:


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

    相反,

    • 您可以将源对象destructure 转换为目标键和键的...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%;}

    【讨论】:

      【解决方案3】:

      您可以像这样将Object.entriesreduce 组合起来:

      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);

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2014-05-25
        • 2012-02-08
        • 1970-01-01
        • 1970-01-01
        • 2020-06-02
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多