需要将格式为[{'a':'man', 'age':'35'},{'b':'woman', 'age':'30'}]
的大约5个或更多javascript对象的数组转换为[{gender:'man','age':'35'},{gender:'woman','age':'30'}]
。
有效的方法是什么?
修改
此外,输入数组可能是这样的,其中键被切换:
[{'a':'man', 'age':'35'},{'age':'30', 'b':'woman'}]
其中a,b,...可以是任何东西,数组中的对象最多可以有10个对象。
答案 0 :(得分:4)
您可以迭代数组并迭代键并仅将未知键更改为gender
。
var data = [{ a: 'man', age: '35' }, { b: 'woman', age: '30' }];
data.forEach(function (o) {
Object.keys(o).forEach(function (k) {
if (k !== 'age') {
o.gender = o[k];
delete o[k];
}
});
});
console.log(data);
答案 1 :(得分:4)
您可以遍历原始数组并将您拥有的字段映射到所需的字段:
var array=[{'a':'man', 'age':'35'},{'b':'woman', 'age':'30'}];
var newArray = array.map(function(item){
return {
age: item.age,
gender: item.a || item.b
};
});
console.log(newArray);
答案 2 :(得分:0)
您应该使用map
方法接受callback
函数作为参数。
此外,您必须使用Object.keys(item)[0]
才能获得第一个密钥。
var array=[{'a':'man', 'age':'35'},{'b':'woman', 'age':'30'}];
console.log(array.map(function(item){
return {gender: item[Object.keys(item)[0]],age:item.age};
}));

答案 3 :(得分:0)
要更改对象的属性名称,首先要创建一个新的gender
属性,然后删除旧属性
var arr = [{'a':'man', 'age':'35'},{'b':'woman', 'age':'30'}];
arr.forEach( o => {
var k = Object.keys(o).find( x => x!=='age');
o.gender = o[k];
delete o[k];
});
console.log(arr)
答案 4 :(得分:0)
像其他人提出的建议一样,我就是这样做的:
我会将密钥映射到正确的密钥a|b => gender, age => age
或者定义一个函数,它应该根据值(或类型)给我正确的密钥..
简单映射
const keysMap = {
gender: ['a', 'b'],
age: 'age'
};
// get it once.
const rightKeys = Object.keys(keysMap);
const rightKeysLen = rightKeys.length;
function getRightKeyBy(key) {
for (let i = 0; i < rightKeysLen; i++ ) {
const condition = keysMap[rightKeys[i]];
if (key === condition ||
(condition instanceof Array && condition.indexOf(key) > -1)) {
return rightKeys[i]
}
}
// if no better key was found return the initial key
return key;
}
function convertKeys(obj) {
const newObj = {};
Object.keys(obj).forEach(key => {
newObj[getRightKeyBy(key)] = obj[key];
});
return newObj;
}
var array = [{a: 'men', age: '25'},{b: 'woman', age: '35'}];
var correctArray = array.map(convertKeys);
console.log(correctArray);