基于另一个对象创建新的javascript对象
我正在尝试创建一个新的javascript对象,该对象将基于另一个对象具有新的键名。我就快到了,但是我的代码在基于另一个对象创建新的javascript对象,javascript,Javascript,我正在尝试创建一个新的javascript对象,该对象将基于另一个对象具有新的键名。我就快到了,但是我的代码在//fails here行失败,带有未捕获类型错误:无法设置未定义的属性“name”。你知道怎么做吗?另外,在这种情况下,是否有更有效的方法来构建新对象?我需要它在旧的IE浏览器上工作,因此采用这种方法 originalObj={“姓名”:“约翰”,“年龄”:30岁,“州”:“CA”,“国家”:“美国”}; 对象代码={“姓名”:101,“年龄”:102,“州”:103,“国家”:10
//fails here
行失败,带有未捕获类型错误:无法设置未定义的属性“name”。你知道怎么做吗?另外,在这种情况下,是否有更有效的方法来构建新对象?我需要它在旧的IE浏览器上工作,因此采用这种方法
originalObj={“姓名”:“约翰”,“年龄”:30岁,“州”:“CA”,“国家”:“美国”};
对象代码={“姓名”:101,“年龄”:102,“州”:103,“国家”:104};
//newObj={101:“约翰”,102:30103:“加州”,104:“美国”};
newObj={};
对于(原始版本中的var i){
if(objCodes.hasOwnProperty(i)){
//console.log(i,originalObj[i]);
log(objcode[i],originalObj[i])
newObj.objCodes[i]=originalObj[i]//在这里失败
}
}
console.log(newObj)代码>只需更改下面代码段中的行即可
originalObj={“姓名”:“约翰”,“年龄”:30岁,“州”:“CA”,“国家”:“美国”};
对象代码={“姓名”:101,“年龄”:102,“州”:103,“国家”:104};
//newObj={101:“约翰”,102:30103:“加州”,104:“美国”};
newObj={};
对于(原始版本中的var i){
if(objCodes.hasOwnProperty(i)){
//console.log(i,originalObj[i]);
log(objcode[i],originalObj[i])
newObj[objCodes[i]]=originalObj[i]//此处失败
}
}
console.log(newObj)代码>
将虚线符号更改为括号符号。原因是JavaScript只允许使用虚线符号的有效名称,不能以数值开头。在您的例子中,键被设置为101102…等等,这是无效的
编辑:动态属性名称只能通过括号符号使用,例如在使用变量设置属性名称的情况下。您可以获取键,对其进行迭代并复制如下项:
originalObj = {"name":"John","age":30,"state":"CA","country":"USA"};
objCodes = {"name":101,"age":102,"state":103,"country":104};
// newObj = {101:"John", 102:30,103:"CA",104:"USA"};
newObj = {};
Object.keys(objCodes).forEach(i => newObj[objCodes[i]] = originalObj[i]);
newObj[objCodes[i]]=originalObj[i]
因为无论objCodes[i]
的值是什么,newObj.objCodes[i]
都无法工作,数值与之无关。您需要newObj[objCodes[i]]
,因为objCodes[i]
是一个变量,并且正在动态设置newObj
键。
originalObj = {"name":"John","age":30,"state":"CA","country":"USA"};
objCodes = {"name":101,"age":102,"state":103,"country":104};
// newObj = {101:"John", 102:30,103:"CA",104:"USA"};
newObj = {};
Object.keys(objCodes).forEach(i => newObj[objCodes[i]] = originalObj[i]);