在javascript中重新定义对象的映射

在javascript中重新定义对象的映射,javascript,function,object,Javascript,Function,Object,这就是我目前正在做的提示: 定义一个函数mapObject,该函数接受与map相同的参数,但它适用于对象。然后必须使用mapObject并在下面给出的输入上使用它。然后定义一个回调函数format,将其传递到mapObject中,以便获得下面的输出。格式应该接收两个参数,键和值 输入是一个对象,输出是带有格式化值的对象。 你可以硬编码“传记”的格式;不要硬编码任何其他内容 不要创建任何其他函数 这就是对象的例子(没有已知的变量名) 我目前的解决办法如下: var mapObject = func

这就是我目前正在做的提示:

定义一个函数mapObject,该函数接受与map相同的参数,但它适用于对象。然后必须使用mapObject并在下面给出的输入上使用它。然后定义一个回调函数format,将其传递到mapObject中,以便获得下面的输出。格式应该接收两个参数,键和值

输入是一个对象,输出是带有格式化值的对象。 你可以硬编码“传记”的格式;不要硬编码任何其他内容 不要创建任何其他函数

这就是对象的例子(没有已知的变量名)

我目前的解决办法如下:

var mapObject = function(object, callback) {
    var newObject = {};

     for (let key in object) {

     newObject[key] = callback(key, object[key]);

  }
  return newObject;
};

var format = function(key, value) {
  if (key === "biography") {
    return value.toLowerCase();
  } 
  else {
    return value.toUpperCase();
  }
};

每次我运行代码时,我返回,不能读取属性应该是未定义的。有人能帮我找出我做错了什么吗?

你已经取得了很大的进步。下面是一些正确方向的进一步指示(但这是不完整的…您需要填写一些细节,这样我就不会剥夺您的学习经验)注意:编辑以返回本机
映射
函数样式的新对象

var mapObject = function(object, callback) {
  var newObject = {}
  // You need to get each key of the object and then
  // call 'callback' on object.key and assign it back to the object
  newObject[key] = callback(key, object[key])

  // when all done, return the reformatted object
  return newObject;
}    
你的格式函数看起来不错

var format = function(key, value) {
      if (key === "biography") {
        return value.toLowerCase();
      } else {
        return value.toUpperCase();
      }
};
由于要求format函数接受两个参数(key和value),因此需要从对象中获取每个键并调用该元素上的函数。对于我提供的要正常工作的不完整的代码,您需要添加一个循环来处理每个键。提示:
用于(输入对象)
object.keys
.forEach()

如果您仍然运行卡住后,您的最新尝试,我们可以帮助一些更多

编辑进一步解释forEach和for

根据要求,下面是有关使用
forEach
的更多详细信息。在数组上调用forEach,因此首先需要获取对象的键。像这样:

Object.keys(object).forEach(function(key) {
  // now do something with key
})
尝试将这种方法合并到代码中

但另一种方法就是给我们一个
for
循环,因为javascript足够聪明,可以为您获取密钥:

for(var key in object) {
      // now do something with key
}
可能是:

var doc,bod,I,objMap,old=onload;//用于其他负载
onload=函数(){
if(old)old();//如果在其他页面上使用该技术,请更改旧的变量名
单据=单据;bod=单据体;
I=功能(id){
返回单据getElementById(id);
}
objMap=函数(obj,func){
var h,o={};
用于(obj中的var i){
h=func(i,obj[i]);
for(h中的n值){
o[n]=h[n];
}
}
返回o;
}
var yourObj={
名字:'詹姆斯',
姓:"胡",,
性别:'男',
传记:“哦,嘿,我只是个男人”
}
var newObj=objMap(你的obj,函数(k,v){
var nk=k,nv=v,o={}
如果(k!=“传记”){
nv=v.toUpperCase();
}
如果(k=='firstName'){
nk='lookTheKeyChanged';
}
如果(v==‘男性’){
nv='查看已更改的值';
}
o[nk]=nv;
返回o;
});
var out=I('out'),txt='';
用于(新OBJ中的var i){
txt+=i+':'+newObj[i]+'
'; } out.innerHTML=txt; }
/*external.css*/
html,正文{
填充:0;边距:0;
}
身体{
背景:#000;溢出-y:滚动;
}
梅因先生{
宽度:936px;背景:#ccc;填充:20px;边距:0自动;
}
#出去{
背景:fff;填充:10px;
}

objMap

第一个函数中似乎缺少一些代码。有一个关闭的大括号,使它看起来像你错过了一个如果检查。+1。小毛病:map函数的思想是返回一个新集合而不改变原始集合。因此,最好不要覆盖
object[key]
的值,而是在新对象上设置
key
属性。@MattBrowne一点不错。我编辑了我的答案以进行此更改。好的,所以我在顶部添加了一个for..in循环,但我被卡住了,因为现在我有一个类型错误,即undefined上的toUpperCase属性不能读取。我不必向循环中添加条件语句,因为我希望将值分配给我的新数组,因为它已经被理解了,对吗?不管怎样,我发现了我的错误:非常感谢!我将更新我的问题,以防这对其他人有所帮助。@Eric我想知道如何正确使用forEach属性。我是javascript的新手,正在学习这些方法。我知道它使用函数回调作为参数。因此,正确的使用方法应该是:object.forEach(回调(currentValue、index、array)?我尝试使用forEach,但会得到一个令牌错误。
for(var key in object) {
      // now do something with key
}