Javascript 根据第一个“重命名JSON键”;“世界其他地区”;在对象数组中
我有一个JSON对象数组,需要根据第一个对象中的值重命名键。尝试在NodeJS中这样做,但没有任何运气 我可能可以通过几个循环来强制执行它,但我希望有一个更具可伸缩性的解决方案,因为“列”的数量会不时变化 这里有一个例子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"}
[{"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 */