javascript - 您能解释一下下面两个 JavaScript 代码片段之间的区别吗?

标签 javascript object key-value

我被要求写一段代码来反转传入对象的所有键值对。这就是我写的。

invert(object){
   let newObj = {};
   
   for(let key in object){
      const original = object[key];
      newObj = {original : key}
   }
   
   return newObj;        
}

显然,dosent 有效(我不知道为什么)。问题的答案是

invert(object){
   let invertedObject = {};
   
   for(let key in object){
      const originalValue = object[key];
      invertedObject = {originalValue : key}
   }
 
   return invertedObject;
}

当使用测试文件运行时,我的代码失败而答案代码通过。我的推理是返回未定义。

测试错误代码:

Failed: _.invert({originalKey: "originalValue"})["originalValue"]) returned undefined instead of originalKey

最佳答案

区别在于下面的语句:

newObj = {original : key}

在您的代码中,当您使用 original 作为 newObj 中的键时,而不是使用 original 变量的值作为key,'original' 按字面意思用作键。

original 变量未在您的代码中使用。

您可以通过使用计算属性名称来解决此问题:

newObj = { [original]: key };

如果不使用计算属性,newObj 将是:

{
   original:"originalKey"
}

但是使用计算属性名称,newObj 将是:

{
   originalValue:"originalKey"
}

第二个代码示例有效,因为在以下语句中

invertedObject = {originalValue : key}

他们使用 originalKey 的值作为 key 的名称。所以返回对象的键将是'originalValue'

另请注意,第二个代码示例中的以下语句

const originalValue = object[key];

是不必要的,因为未使用 originalValue 变量。第二个代码示例在没有上述语句的情况下也可以工作。

如果第二个代码示例使用计算属性名称作为:

invertedObject = { [originalValue] : key }

然后您需要声明 originalValue 变量的语句。


就我个人而言,我认为第二个代码示例容易出错并且很容易被破坏;它也不适合制作可重用的功能,因为:

  • 传递给这个函数的对象不会总是有一个键
  • 您不会总是知道对象中每个键的值,即使您知道这些值,如果对象有多个键,这种方法也行不通

您应该使用不依赖于变量名称与对象中键值相同的计算属性名称。

关于javascript - 您能解释一下下面两个 JavaScript 代码片段之间的区别吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68494333/

相关文章:

java - 什么是键值对?

Python:从value中获取对应的key

javascript - 编辑 JSON 对象 - 寻找更好的功能方法

javascript - 对于对象中的 var,返回方法和属性

c++ - C++ 类是否具有默认构造函数以及在以下情况下调用哪些构造函数?

perl - 如果没有分配给任何变量,对象是否可访问?

javascript - 如何在 html Canvas 中围绕文本绘制矩形?

javascript - 使用jquery计算页面中第一级UL LI的数量

javascript - Fabric.js : Is there any issue for creating multiple objects using only one variable?

带有后缀的简单键值对的 Java 正则表达式