为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

Helenr 2023-09-21 16:25:33
编写一个接受数组和对象的方法。该方法应返回一个新数组,其中原始数组的元素被对象中相应的值替换。我很困惑为什么它不返回任何东西。我走在正确的轨道上吗?我不确定我是否应该执行 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"]
查看完整描述

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




查看完整回答
反对 回复 2023-09-21
  • 1 回答
  • 0 关注
  • 104 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信