2017-12-28 11 views
1

にjavascriptオブジェクト上記のオブジェクトからフォーマット特定の構造

obj = {"account_id-0":null,"option_item_id-0":1,"value-0":"wer","account_id-1":null,"option_item_id-1":2,"value-1":"kkk","account_id-2":null,"option_item_id-2":3,"value-2":"qqqqq" 
.... 
"account_id-n":null,"option_item_id-n":6,"value-n":"see" 
} 

を次のように私はjavascriptオブジェクトを持って、私は次のような構造

{"0": { 
     account_id: null, 
     option_item_id: 1, 
     value: "wer" 
     }, 
"1": { 
     account_id: null, 
     option_item_id: 2, 
     value: "kkk" 
     }, 
"2": { 
     account_id: null, 
     option_item_id: 2, 
     value: "qqqqq" 
     }, 
    . 
    . 
    . 
"n": { 
     account_id: null, 
     option_item_id: 6, 
     value: "see" 
     } 
}  

に実装する方法上の任意のアイデアを作成する必要がありますこの?

+0

それは私に文字列操作のように見えます。これまでに何を試しましたか? –

+0

簡単な解決策(最適なレベルまでパフォーマンスが向上しない場合があります)には、 'lodash/underscore'ユーティリティ –

答えて

4

all the keysを反復処理し、Array#reduceを使用して結果オブジェクトを作成できます。

let obj = { 
 
    "account_id-0": null, 
 
    "option_item_id-0": 1, 
 
    "value-0": "wer", 
 
    "account_id-1": null, 
 
    "option_item_id-1": 2, 
 
    "value-1": "kkk", 
 
    "account_id-2": null, 
 
    "option_item_id-2": 3, 
 
    "value-2": "qqqqq", 
 
    "account_id-n": null, 
 
    "option_item_id-n": 6, 
 
    "value-0": "see" 
 
}; 
 

 
let result = Object.keys(obj).reduce((res, item) => { 
 
    let [key, index] = item.split('-'); 
 

 
    if (!res[index]) { 
 
    res[index] = {}; 
 
    } 
 

 
    res[index][key] = obj[item]; 
 
    return res; 
 
}, {}); 
 

 
console.log(result);

1

var obj = { 
 
    "account_id-0": null, 
 
    "option_item_id-0": 1, 
 
    "value-0": "wer", 
 
    "account_id-1": null, 
 
    "option_item_id-1": 2, 
 
    "value-1": "kkk", 
 
    "account_id-2": null, 
 
    "option_item_id-2": 3, 
 
    "value-2": "qqqqq" 
 
}; 
 

 
var props = []; 
 

 
function getObj(ind) { 
 
    for (var p in props) { 
 
    if (ind === p) { 
 
     return props[p]; 
 
    } 
 
    } 
 
} 
 

 
for (var prop in obj) { 
 
    var parts = prop.split('-'); 
 
    var key = parts[0]; 
 
    var indx = parts[1]; 
 
    var tmp = getObj(indx); 
 
    if (tmp == undefined) { 
 
    var x = {}; 
 
    x[indx] = {}; 
 
    x[indx][key] = obj[prop]; 
 
    props.push(x); 
 
    } else { 
 
    tmp[indx][key] = obj[prop]; 
 
    } 
 
} 
 

 
console.log(props);

これは、オブジェクトのアレイ単純分割()関数をmaniplulatingの直接的な方法であるべきです。

0

はこれを試してみてください:

var keys = Object.keys(obj), i = 0 
var arr = [], o = {} 
for(var k in keys) { 
    if(keys[k].match(/\d*$/m) == i) { 
     o[keys[k].replace(/-\d*$/m,'')] = obj[keys[k]] 
    } else { 
     i++ 
     arr.push(o) 
     o = {} 
    } 
} 

ここで私が代わりにキー "0"、 "1"、 "2"、... "N" を持つオブジェクトの配列を使用しています。私はそれがより便利だと思う。