Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/383.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
基于另一个对象创建新的javascript对象_Javascript - Fatal编程技术网

基于另一个对象创建新的javascript对象

基于另一个对象创建新的javascript对象,javascript,Javascript,我正在尝试创建一个新的javascript对象,该对象将基于另一个对象具有新的键名。我就快到了,但是我的代码在//fails here行失败,带有未捕获类型错误:无法设置未定义的属性“name”。你知道怎么做吗?另外,在这种情况下,是否有更有效的方法来构建新对象?我需要它在旧的IE浏览器上工作,因此采用这种方法 originalObj={“姓名”:“约翰”,“年龄”:30岁,“州”:“CA”,“国家”:“美国”}; 对象代码={“姓名”:101,“年龄”:102,“州”:103,“国家”:10

我正在尝试创建一个新的javascript对象,该对象将基于另一个对象具有新的键名。我就快到了,但是我的代码在
//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]);