我被要求写一段代码来反转传入对象的所有键值对。这就是我写的。
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/