Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/33.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 根据第一个“重命名JSON键”;“世界其他地区”;在对象数组中_Javascript_Node.js_Json - Fatal编程技术网

Javascript 根据第一个“重命名JSON键”;“世界其他地区”;在对象数组中

Javascript 根据第一个“重命名JSON键”;“世界其他地区”;在对象数组中,javascript,node.js,json,Javascript,Node.js,Json,我有一个JSON对象数组,需要根据第一个对象中的值重命名键。尝试在NodeJS中这样做,但没有任何运气 我可能可以通过几个循环来强制执行它,但我希望有一个更具可伸缩性的解决方案,因为“列”的数量会不时变化 这里有一个例子 [{"A" : "Key1", "B" : "Key2", "C" : "Key3"}, {"A" : "Data1", "B" : "Data2", "C" : "Data3"}, {"A" : "Data5", "B" : "Data5", "C" : "Data7"}

我有一个JSON对象数组,需要根据第一个对象中的值重命名键。尝试在NodeJS中这样做,但没有任何运气

我可能可以通过几个循环来强制执行它,但我希望有一个更具可伸缩性的解决方案,因为“列”的数量会不时变化

这里有一个例子

[{"A" : "Key1", "B" : "Key2", "C" : "Key3"},
 {"A" : "Data1", "B" : "Data2", "C" : "Data3"},
 {"A" : "Data5", "B" : "Data5", "C" : "Data7"}]
我希望结果是这样的

[{"Key1" : "Key1", "Key1" : "Key2", "Key1" : "Key3"},
 {"Key1" : "Data1", "Key2" : "Data2", "Key3" : "Data3"},
 {"Key1" : "Data5", "Key2" : "Data5", "Key3" : "Data7"}]
让arr=[{“A”:“Key1”,“B”:“Key2”,“C”:“Key3”},
{“A”:“Data1”,“B”:“Data2”,“C”:“Data3”},
{“A”:“Data5”,“B”:“Data5”,“C”:“Data7”}];
const keys=Object.keys(arr[0]).map(i=>arr[0][i]);
让结果=arr.map(obj=>{
const replacedObj={};
const oriKeys=Object.keys(obj);
for(设i=0;i
使用时要有创意,并且:


完整代码段:

let输入,输出;
输入=[
{“A”:“Key1”,“B”:“Key2”,“C”:“Key3”},
{“A”:“Data1”,“B”:“Data2”,“C”:“Data3”},
{“A”:“Data5”,“B”:“Data5”,“C”:“Data7”}
];
output=input.map(x=>Object.entries(x).reduce((a[k,v])=>({…a[input[0][k]]:v}),{});

控制台日志(输出)假设旧数组存储在名为oldArray的变量中:

var keys = Object.keys(oldArray[0]); // get first object keys
var newArray = oldArray.map(function(obj,index){
// Iterate over each object to replace keys
if(index === 0) return obj; /* if first object we dont need to replace 
keys */
var objKeys = Object.keys(obj); //old keys for reference only
  return Object assign({},{
      [keys[0]]: obj[objKeys[0],  // assigning first object keys with 
       current 
      [keys[1]]: obj[objKeys[1],  // object values
      [keys[2]]: obj[objKeys[3],
 });
}); 
console.log(newArray);

/* You also can change the key value asignation with a for, so you 
can handle not only 3 key values object, this could be optimized 
with es6 ans spread operator definition but rather to implement it in 
es5 for less complexity */

哇,这很快,正是我需要的谢谢你。现在我需要研究这一点并理解您所做的事情。这有点古怪,因为如果键的定义/返回顺序不同(JavaScript/JSON中不保证对象属性的顺序),您将得到不正确的结果。注释与for相同。基于密钥返回顺序的错误结果。
o = i.map(x => Object.entries(x).reduce((a, [k, v]) => ({...a, [i[0][k]]: v}), {}));
var keys = Object.keys(oldArray[0]); // get first object keys
var newArray = oldArray.map(function(obj,index){
// Iterate over each object to replace keys
if(index === 0) return obj; /* if first object we dont need to replace 
keys */
var objKeys = Object.keys(obj); //old keys for reference only
  return Object assign({},{
      [keys[0]]: obj[objKeys[0],  // assigning first object keys with 
       current 
      [keys[1]]: obj[objKeys[1],  // object values
      [keys[2]]: obj[objKeys[3],
 });
}); 
console.log(newArray);

/* You also can change the key value asignation with a for, so you 
can handle not only 3 key values object, this could be optimized 
with es6 ans spread operator definition but rather to implement it in 
es5 for less complexity */