更改对象的属性名称

时间:2017-02-05 21:06:08

标签: javascript

需要将格式为[{'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个对象。

5 个答案:

答案 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);