2016-03-22 28 views
1

これは私の配列である:この配列をオブジェクトの配列に変換するには?

[ 
    ['x', 1], 
    ['y', 2], 
    ['z', 3], 
    ['F', "_180"], 
    ['x', 1], 
    ['y', 2], 
    ['z', 3], 
    ['t', 4] 
    ['F', "_360"], 
    ['x', 1], 
    ['y', 2], 
    ['z', 3], 
    ['t', 4], 
    ['m', 5] 
    ['F', "_480"], 
] 

これは私が達成したいものです。

[{ 
    profile_180: { 
     x: 1, 
     y: 2, 
     z: 3 
    } 
}, { 
    profile_360: { 
     x: 1, 
     y: 2, 
     z: 3, 
     t: 4 
    } 
}, { 
    profile_480: { 
     x: 1, 
     y: 2, 
     z: 3 
     t: 4, 
     m: 5 
    } 
}] 

は、どのように私はこれを得るのですか?

+2

を試すには、本当に無駄です。配列に関する質問に問題がありますか? :s – scaryguy

答えて

1

あなたは、によって

xdataが含まれてい arrayある
var res = [], tmp = {}, obj = {}; 
x.forEach(function(itm,i) { 
if(itm[0] !== "F"){ 
    tmp[itm[0]] = itm[1]; 
} else { 
    obj["profile_" + itm[1]] = tmp; 
    res.push(obj); 
    tmp = {}, obj ={}; 
} 
}); 

を行うことができます。

+1

これは私が必要としていたものです。ありがとうございました! – scaryguy

+0

@scaryguy喜んで助けて! :) –

2

data = [ 
 
    ['x', 1], 
 
    ['y', 2], 
 
    ['z', 3], 
 
    ['F', "_180"], 
 
    ['x', 1], 
 
    ['y', 2], 
 
    ['z', 3], 
 
    ['t', 4], 
 
    ['F', "_360"], 
 
    ['x', 1], 
 
    ['y', 2], 
 
    ['z', 3], 
 
    ['t', 4], 
 
    ['m', 5], 
 
    ['F', "_480"], 
 
]; 
 

 
var result = {}; 
 
var current = {}; 
 
data.forEach(function(row) { 
 
    if (row[0] == 'F') { 
 
    result['profile' + row[1]] = current; 
 
    current = {}; 
 
    } else { 
 
    current[row[0]] = row[1]; 
 
    } 
 
}); 
 
console.log(result);
<!-- results pane console output; see http://meta.stackexchange.com/a/242491 --> 
 
<script src="http://gh-canon.github.io/stack-snippet-console/console.min.js"></script>

+0

うわー...ありがとう! – scaryguy

+0

Err、実際に私は自分の質問を更新しましたが、あなたはとても速いので、あなたは更新されたバージョンを見ていないと思います。 – scaryguy

0

コメントせずに投票ダウンこの

var obj = [ 
 
    ['x', 1], 
 
    ['y', 2], 
 
    ['z', 3], 
 
    ['F', "_180"], 
 
    ['x', 1], 
 
    ['y', 2], 
 
    ['z', 3], 
 
    ['t', 4], 
 
    ['F', "_360"], 
 
    ['x', 1], 
 
    ['y', 2], 
 
    ['z', 3], 
 
    ['t', 4], 
 
    ['m', 5], 
 
    ['F', "_480"], 
 
]; 
 
var output = []; 
 
var tmpArr = {}; 
 
obj.forEach(function(value,index){ 
 

 
    console.log(value); 
 
    if (value[0] != 'F') 
 
    { 
 
     tmpArr[value[0]] = value[1]; 
 
    } 
 
    else 
 
    { 
 
    var profileValue = "Profile_" + value[1]; 
 
    var tmpObj = {}; 
 
    tmpObj[profileValue] = tmpArr; 
 
     output.push(tmpObj); 
 
     tmpArr = {}; 
 
    } 
 
}); 
 
document.body.innerHTML += JSON.stringify(output,0,4);

関連する問題