2016-05-12 8 views
-1

私はいくつかのレガシーコードを修正しようとしています。私は例を作り、その結果が続くでしょう。これは古い配列の例です。キー値のペアを適切に挿入するjavascript

var old = { 1: ['A', 'E', 'I', 'O', 'U'] }; 

私は私は本当に近くではなく、かなりある。この結果

[ { a : 1 }, { e : 1 }, { i : 1 }, { o : 1 }, { u : 1 } ] 

に取得この

var ETL = function(){}; 

ETL.prototype.transform = function(old){ 
    var array = []; 
    for (var variable in old) { 
     console.log(variable); 
     for(var i = 0; i < old[variable].length; i++){ 
      var obj = {}; 
      var key = old[variable][i].toLowerCase(); 
      obj[key] = parseInt(variable); 
      array.push(obj); 
     } 
    } 
    return array; 
}; 

を使用する場合、これは今

var expected = { a: 1, e: 1, i: 1, o: 1, u: 1 }; 

を返されているものでなければなりません私が探しているもの。私は、キー値のペアを持つオブジェクトが本当に必要なときにオブジェクトの配列を作成したと思います。私はステップ1はオブジェクトとして配列を再宣言することであり、次にステップ2は配列の代わりにオブジェクトを扱うコードを修正することだと思います。私はちょうどそれを行う方法を正確には分かりません。

+0

はい、オブジェクトではなく、アレイを使用しています。次に、 'obj [key] = parseInt(variable)'を実行します。それだけです。 'obj'と' push'の余分なコードを取り除く。 – deceze

答えて

2
var obj = {}; 
for(var i = 0; i < old[variable].length; i++){ 

      var key = old[variable][i].toLowerCase(); 
      obj[key] = parseInt(variable); 
      //array.push(obj); 
     } 

objを1回だけ宣言します。ループの繰り返しごとに作成しています

+0

これは私のために働いて、すべてのデータをオブジェクトに正しく戻します –

0

配列reduceメソッドを使用して解決できます。

var old = { 1: ['A', 'E', 'I', 'O', 'U'] }; 
var _getOne = old['1']; //get value of key 1 

function getWordCnt(arr){ 
    return arr.reduce(function(prev,next){ 
     prev[next] = (prev[next] + 1) || 1; 
     return prev; 
    },{}); 
} 
console.log(getWordCnt(_getOne)) 

チェックこのjsfiddle

注:代わりに、整数の良い文字列としてキーを持っている

0

あなたは、大文字の配列とそれぞれ以下のオブジェクトの多くのプロパティを持っていると仮定すると、単一行の割り当ては、それらをすべて新しいフォームに変換します。

var old = { 1: ['A', 'E', 'I', 'O', 'U'], 
 
      2: ['B', 'T', 'O', 'M', 'V'], 
 
      3: ['C', 'B', 'X', 'N', 'S'] 
 
      }, 
 
newList = Object.keys(old).map(k => old[k].reduce((p,c) => {p[c.toLowerCase()] = k*1; return p},{})); 
 
document.write("<pre>" + JSON.stringify(newList,null,2) + "</pre>");

関連する問題