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 回答