编写一个方法,该方法接受一个数组和一个对象,并返回一个数组及其在对象中的对应值

编写一个接受数组和对象的方法。该方法应返回一个新数组,其中原始数组的元素被对象中相应的值替换。我很困惑为什么它不返回任何东西。我走在正确的轨道上吗?我不确定我是否应该执行 arr = result.


   function elementReplace(arr, obj) {

        var result = [];

        for (key in obj) {

            result.push(key[obj]);

            arr = result;

        }

        return result;

    }

    

    arr1 = ["LeBron James", "Lionel Messi", "Serena Williams"];

    obj1 = {"Serena Williams": "tennis", "LeBron James": "basketball"};

    

    elementReplace(arr1, obj1); // returns ["basketball", "Lionel Messi", "tennis"]


Helenr
浏览 105回答 1
1回答

摇曳的蔷薇

我很困惑为什么它不返回任何东西。你的函数正在返回一些东西,它返回一个数组,如下所示:[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 FOREND 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);
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript