2017-02-05 15 views
0

この形式の約5以上のJavaScriptオブジェクトの配列[{'a':'man', 'age':'35'},{'b':'woman', 'age':'30'}][{gender:'man','age':'35'},{gender:'woman','age':'30'}]に変換する必要があります。オブジェクトのプロパティ名を変更する

効率的な方法は何ですか? A、B、...できた最大10個のオブジェクトへの配列には何もしてオブジェクト可能性があり [{'a':'man', 'age':'35'},{'age':'30', 'b':'woman'}]を:キーが入れ替えされている場合

編集
はまた、入力配列は、このようなことがあります。

+0

それは常に 'a'と' b'ですか、それとも値をチェックする必要がありますか? – adeneo

+0

何に比べて効率的ですか?あなたは今、あなたが不足していると感じていることは何ですか? –

+0

@NinaScholzの答えに何が問題なのですか? –

答えて

3

あなたができました配列を反復してキーを反復し、未知数のみを変更する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);

0

パラメータとしてcallback機能を使用するmapメソッドを使用する必要があります。

また、最初のキーを取得するには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}; 
 
}));

+0

@Downvoter、downvoteを説明してください。 –

+0

'Object.keys'が' 0'の位置に期待するプロパティを与えるという保証はありません。 –

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)

3

あなたが必要とする分野にあなたが持っている元の配列とマップフィールドを反復処理することができます他の人と同様に

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

+0

問題のプロパティは常に真実の値を持つので、これは適切な方法です。*「他の方法」*よりも良い説明が良いでしょう。 –

+0

修正済み、ありがとう –

+0

@squintキーa、bは '||'演算子を使用するには多すぎるかもしれないが、それらはあらかじめわかっていない。 –

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); 
関連する問題