1 回答

TA贡献1793条经验 获得超6个赞
我很困惑为什么它不返回任何东西。
你的函数正在返回一些东西,它返回一个数组,如下所示:
[undefined, undefined]
您需要确保用于console.log()将返回值记录到控制台。你之所以得到这样的结果是undefined因为你使用了key[obj]. 当您使用for...in循环时,key代表对象中的键,这意味着您需要使用obj[key]
我走在正确的轨道上吗?
你是对的,你需要一个循环,但是,你循环了错误的东西。该问题要求您创建一个新数组,其中原始数组中的元素将替换为对象中相应的值。这意味着您需要循环 中的元素arr,并将每个元素视为中的键obj。使用该键,您可以obj[key]从对象中获取该键的相应值。您还需要确保键位于对象内部,以查看它是否包含值。
逻辑如下:
FUNCTION elementReplace(arr, obj)
result <- []
FOR elemKey in arr DO:
IF elemKey is a key of obj THEN:
push obj[elemKey] to result
ELSE:
push elemKey to result
END IF
END FOR
END FUNCTION
我不确定我是否应该执行 arr = result.
您不需要这样做,arr = result;因为这只是将函数内的局部变量重新分配给您正在创建的arr新数组。这并没有取得多大成果,因为您在当前代码中result没有做任何事情。arr
解决方案(在揭晓之前先尝试上述方法):
function elementReplace(arr, obj) {
const result = [];
for (const elemKey of arr) { // iterate through each element in the array
if (obj.hasOwnProperty(elemKey)) // check if object has key
result.push(obj[elemKey]);
else
result.push(elemKey);
}
return result;
}
const arr1 = ["LeBron James", "Lionel Messi", "Serena Williams"];
const obj1 = {
"Serena Williams": "tennis", "LeBron James":
"basketball"
};
console.log(elementReplace(arr1, obj1)); // returns ["basketball", "Lionel Messi", "tennis"]
或者,您可以使用Array.prototype.map()并利用对象中的每个值都是true 的事实,这意味着如果您从对象中得到一个falseundefined
值,它一定是,允许您默认值:
const elementReplace = (arr, obj) => arr.map(key => obj[key] || key);
添加回答
举报