5

次のような JSON があります。

var countries = [
{
  name: 'united states',
  program: {
              name: 'usprogram'
           }
},
{
  name: 'mexico',
  program: {
              name: 'mexico program'
           }
},
{
  name: 'panama',
  program: [
             {
               name: 'panama program1'
             },
             {
               name: 'panama program2'
             }
           ]
},
{
  name: 'canada'
}
];

最終出力が次のようになるように、常にオブジェクトを配列にラップする方法はありcountries.programsますか? underscoreJS でいくつかのユーティリティ関数を試しましたが、解決策が見つかりませんでした。

var countries = [
{
  name: 'united states',
  program: [    //need to wrap this object into an array
             {
              name: 'usprogram'
             }
           ]
},
{
  name: 'mexico',
  program: [   //need to wrap this object into an array
             {
               name: 'mexico program'
             }
           ]
},
{
  name: 'panama',
  program: [
             {
               name: 'panama program1'
             },
             {
               name: 'panama program2'
             }
           ]
},
{
  name: 'canada'
}
];

ありがとう!

4

2 に答える 2

19

自動ではありません。国をループしてからcountry.program = [].concat(country.program). この最後の魔法は、値が配列でない場合は値をラップし、配列の場合はそのままにします。多くの場合。(これは別のものですが、同等の配列になります)。

リクエストごとに編集:

_.each(countries, function(country) {
  country.program = [].concat(country.program);
});
于 2012-12-11T01:51:46.703 に答える
2

このようなものが機能する可能性があります

_.each(countries, function(country) { 
          ! _.isArray(country.program) && (country.program = [country.program]);
                  });
于 2012-12-11T01:50:37.537 に答える