【问题标题】:How to sort a multidimensional string array如何对多维字符串数组进行排序
【发布时间】:2020-06-04 06:26:58
【问题描述】:

伙计们。我对javascript很陌生,我正在尝试对一个巨大的嵌套数组进行排序。

这是数组的一部分:

      {
      UF: 'AC',
      Cidades: [
        { ID: '79', Nome: 'Acrelândia', Estado: '1' },
        { ID: '80', Nome: 'Assis Brasil', Estado: '1' },
        { ID: '81', Nome: 'Brasiléia', Estado: '1' },
        { ID: '82', Nome: 'Bujari', Estado: '1' },
        { ID: '83', Nome: 'Capixaba', Estado: '1' }
        ]}
      {
      UF: 'AL',
      Cidades: [
        { ID: '101', Nome: 'Água Branca', Estado: '2' },
        { ID: '102', Nome: 'Anadia', Estado: '2' },
        { ID: '103', Nome: 'Arapiraca', Estado: '2' },
        { ID: '104', Nome: 'Atalaia', Estado: '2' },
        { ID: '105', Nome: 'Barra de Santo Antônio', Estado: '2' },
        { ID: '106', Nome: 'Barra de São Miguel', Estado: '2' },
        { ID: '107', Nome: 'Batalha', Estado: '2' }
        ]}
      }

这些数组是一堆对象(每个州一个),每个州对象内都有一个包含所有城市的嵌套数组。我要做的是根据每个“Nome”的长度对嵌套数组“Cidades”进行排序。

我尝试了很多事情都没有成功。我尝试的最后一件事是:

  arr.forEach((state) => {
    arr.sort((a, b) => {
      return b.Cidades[1] - a.Cidades[1];
    });
  });

我也尝试编写自己的比较函数,但没有成功

  function compare(a, b) {
    if (a.Cidades.Nome < b.Cidades.Nome) {
      return -1;
    }
    if (a.Cidades.Nome > b.Cidades.Nome) {
      return 1;
    }
    return 0;
  }

你们能告诉我我该怎么做以及为什么我做错了吗?

提前通知!

【问题讨论】:

    标签: javascript arrays string sorting nested


    【解决方案1】:

    使用sort()forEach()

    var data = [
      {
        UF: 'AC',
        Cidades: [
          { ID: '79', Nome: 'Acrelândia', Estado: '1' },
          { ID: '80', Nome: 'Assis Brasil', Estado: '1' },
          { ID: '81', Nome: 'Brasiléia', Estado: '1' },
          { ID: '82', Nome: 'Bujari', Estado: '1' },
          { ID: '83', Nome: 'Capixaba', Estado: '1' }
        ]
      },
      {
        UF: 'AL',
        Cidades: [
          { ID: '101', Nome: 'Água Branca', Estado: '2' },
          { ID: '102', Nome: 'Anadia', Estado: '2' },
          { ID: '103', Nome: 'Arapiraca', Estado: '2' },
          { ID: '104', Nome: 'Atalaia', Estado: '2' },
          { ID: '105', Nome: 'Barra de Santo Antônio', Estado: '2' },
          { ID: '106', Nome: 'Barra de São Miguel', Estado: '2' },
          { ID: '107', Nome: 'Batalha', Estado: '2' }
        ]
      }
    ]
     
    data.forEach(state => {
      state.Cidades.sort((a, b) => a.Nome.length - b.Nome.length)
    })
     
    console.log(data)

    【讨论】:

      【解决方案2】:

      因此,您希望按字段“Nome”的长度对每个“Cidades”数组进行排序。 您正在尝试以下解决方案。

      Array.forEach( ( data ) => {
          data.cidades.sort( (a,b) =>{
              return b.Nome.length - a.Nome.length; // replace for reverse order sorting
          });
      });
      

      您可以使用“return a.Nome.length - b.Nome.length”进行倒序排序。

      希望它会有所帮助! :)

      【讨论】:

        【解决方案3】:

        您可以通过获取lengthNome 属性对其进行排序

        var data=[{ UF: 'AC', Cidades: [ { ID: '79', Nome: 'Acrelândia', Estado: '1' }, { ID: '80', Nome: 'Assis Brasil', Estado: '1' }, { ID: '81', Nome: 'Brasiléia', Estado: '1' }, { ID: '82', Nome: 'Bujari', Estado: '1' }, { ID: '83', Nome: 'Capixaba', Estado: '1' } ]}, { UF: 'AL', Cidades: [ { ID: '101', Nome: 'Água Branca', Estado: '2' }, { ID: '102', Nome: 'Anadia', Estado: '2' }, { ID: '103', Nome: 'Arapiraca', Estado: '2' }, { ID: '104', Nome: 'Atalaia', Estado: '2' }, { ID: '105', Nome: 'Barra de Santo Antônio', Estado: '2' }, { ID: '106', Nome: 'Barra de São Miguel', Estado: '2' }, { ID: '107', Nome: 'Batalha', Estado: '2' } ]} ];
        
        var result = data.map(arr=>{
           arr.Cidades = arr.Cidades.sort((a,b)=>a.Nome.length-b.Nome.length);
           return arr;
        });
        
        console.log(result);

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2012-03-28
          • 1970-01-01
          • 2018-07-17
          • 2023-01-02
          • 2013-07-19
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多