Javascript 基于属性从对象数组创建分组数组

Javascript 基于属性从对象数组创建分组数组,javascript,Javascript,我有一个对象地址数组,我想根据city属性对该数组进行分组,并返回一个新数组。当然,我不知道输入数组中有多少个不同的城市。我看了类似的问题,但不知道怎么做。我只需要一个通用的动态逻辑。另外,如果可能的话,我想先看看老式的香草JavaScript解决方案 输入 输出: const output = [ [ { description: 'berlin1', address: { street: 'address h

我有一个对象地址数组,我想根据city属性对该数组进行分组,并返回一个新数组。当然,我不知道输入数组中有多少个不同的城市。我看了类似的问题,但不知道怎么做。我只需要一个通用的动态逻辑。另外,如果可能的话,我想先看看老式的香草JavaScript解决方案

输入

输出:

const output = [
  [
      {
          description: 'berlin1',
          address: {
              street: 'address here',
              city: 'berlin'
          }
      },
      {
          description: 'berlin2',
          address: {
              street: 'address here',
              city: 'berlin'
          }
      },
      {
          description: 'berlin3',
          address: {
              street: 'address here',
              city: 'berlin'
          }
      },
      {
          description: 'berlin4',
          address: {
              street: 'address here',
              city: 'berlin'
          }
      }
  ],
  [
      {
          description: 'munich1',
          address: {
              street: 'address here',
              city: 'munich'
          }
      },
      {
          description: 'munich2',
          address: {
              street: 'address here',
              city: 'munich'
          }
      }
  ],
  [
      {
          description: 'hamburg1',
          address: {
              street: 'address here',
              city: 'hamburg'
          }
      }
  ]
]

您可以使用Lodash库,使用groupBy方法按城市分组,然后获取值以返回数组

const props=[{描述:'berlin1',地址:{街道:'address here',城市:'berlin'}},{描述:'munich1',地址:{街道:'address here',城市:'munich'},{描述:'munich2',地址:{街道:'address here',城市:'munich'},{描述:',{描述:'berlin3',地址:{街道:'address here',城市:'berlin'}},{描述:'hamburg1',地址:{街道:'address here',城市:'hamburg'},{描述:'berlin4',地址:{街道:'address here',城市:'berlin'}] const result=u.values_uu.groupByprops,'address.city' console.logresult
您可以使用Lodash库,使用groupBy方法按城市分组,然后获取值以返回数组

const props=[{描述:'berlin1',地址:{街道:'address here',城市:'berlin'}},{描述:'munich1',地址:{街道:'address here',城市:'munich'},{描述:'munich2',地址:{街道:'address here',城市:'munich'},{描述:',{描述:'berlin3',地址:{街道:'address here',城市:'berlin'}},{描述:'hamburg1',地址:{街道:'address here',城市:'hamburg'},{描述:'berlin4',地址:{街道:'address here',城市:'berlin'}] const result=u.values_uu.groupByprops,'address.city' console.logresult
如果你想要一种老式的方式 var props=[{描述:'berlin1',地址:{街道:'address here',城市:'berlin'}},{描述:'munich1',地址:{街道:'address here',城市:'berlin2',地址:{街道:'address here',城市:'berlin'},{描述:'munich2',地址:{街道:'address here城市:'munich'},{描述:'berlin3',地址:{街道:'address here',城市:'berlin'}},{描述:'hamburg1',地址:{街道:'address here',城市:'hamburg'},{描述:'berlin4',地址:{街道:'address here',城市:'berlin'}] 函数groupbycityar{ 变量组={}; 对于变量i=0;iconsole.loggroupByCityprops;如果您想要一种老式的方式 var props=[{描述:'berlin1',地址:{街道:'address here',城市:'berlin'}},{描述:'munich1',地址:{街道:'address here',城市:'berlin2',地址:{街道:'address here',城市:'berlin'},{描述:'munich2',地址:{街道:'address here城市:'munich'},{描述:'berlin3',地址:{街道:'address here',城市:'berlin'}},{描述:'hamburg1',地址:{街道:'address here',城市:'hamburg'},{描述:'berlin4',地址:{街道:'address here',城市:'berlin'}] 函数groupbycityar{ 变量组={}; 对于变量i=0;i 你可以看看我的要点:

const props=[{描述:柏林1,地址:{街道:这里地址,城市:柏林}},{描述:市政1,地址:{街道:这里地址,城市:慕尼黑},{描述:柏林2,地址:{街道:这里地址,城市:柏林},{描述:市政2,地址:{街道:这里地址,城市:慕尼黑},{描述:柏林3,地址:{街道:这里地址,城市:柏林},{说明:汉堡1,地址:{街道:此处地址,城市:汉堡},{说明:柏林4,地址:{街道:此处地址,城市:柏林}] 类映射器{ 构造函数数组,fn=x=>x{ this.map=array.reducemap,item=>{ 康斯特瓦尔 =Fn项目; 如果地图[val]{ map[val]=[]; } 地图[val].pushitem; 返回图; }, {}; } 芬奇{ 返回this.map[key]&&this.map[key][Mapper.FIRST_INDEX];//返回空数组 } findAllkey,返回未定义{ //返回空白数组 返回this.map[key]?this.map[key]:返回未定义?未定义:[]; } } Mapper.FIRST_索引=0; const mapper=new Mapperprops,i=>i.address.city; console.logmapper.map; 康斯特城市=[]; 对于让输入mapper.map{ cities.pushmapper.map[key]; } 2.逻辑城市 您可以使用Mapper Util使其变得简单。使用array.reduce推入对象而不是收集

你可以看看我的要点:

const props=[{描述:柏林1,地址:{街道:这里地址,城市:柏林}},{描述:市政1,地址:{街道:这里地址,城市:慕尼黑},{描述:柏林2,地址:{街道:这里地址,城市:柏林},{描述:市政2,地址:{街道:这里地址,城市:慕尼黑},{描述:柏林3,地址:{街道:这里地址,城市:柏林},{说明:汉堡1,地址:{街道:此处地址,城市:汉堡},{说明:柏林4,地址:{街道:此处地址,城市:柏林}] 类映射器{ 构造函数数组,fn=x=>x{ this.map=array.reducemap,item=>{ const val=fn项; if!map[val]{ map[val]=[]; } 地图[val].pushitem; 返回图; }, {}; } 芬奇{ 返回this.map[key]&&this.map[key][Mapper.FIRST_INDEX];//返回空数组 } findAllkey,返回未定义{ //返回空白数组 返回this.map[key]?this.map[key]:返回未定义?未定义:[]; } } Mapper.FIRST_索引=0; const mapper=new Mapperprops,i=>i.address.city; console.logmapper.map; 康斯特城市=[]; 对于让输入mapper.map{ cities.pushmapper.map[key]; }
控制台。日志城市;没有库。我需要一个普通的JS解决方案。没有库。我需要一个普通的JS解决方案。
const output = [
  [
      {
          description: 'berlin1',
          address: {
              street: 'address here',
              city: 'berlin'
          }
      },
      {
          description: 'berlin2',
          address: {
              street: 'address here',
              city: 'berlin'
          }
      },
      {
          description: 'berlin3',
          address: {
              street: 'address here',
              city: 'berlin'
          }
      },
      {
          description: 'berlin4',
          address: {
              street: 'address here',
              city: 'berlin'
          }
      }
  ],
  [
      {
          description: 'munich1',
          address: {
              street: 'address here',
              city: 'munich'
          }
      },
      {
          description: 'munich2',
          address: {
              street: 'address here',
              city: 'munich'
          }
      }
  ],
  [
      {
          description: 'hamburg1',
          address: {
              street: 'address here',
              city: 'hamburg'
          }
      }
  ]
]