Как отсортировать массив с помощью Jquery - PullRequest
3 голосов
/ 07 мая 2020

У меня один массив, в который входят дети. Я успешно отсортировал массив, но не могу его отсортировать, дети.

Используя приведенный ниже код, я могу отсортировать элементы внешнего почтового массива, но не его дочерние элементы.

https://jsfiddle.net/eokd5uzj/

var arry = [{
    'id': 301,
    'name': '2 Foo',
    'open': 'open',
    'children': [{
        'id': 1313,
        'name': '2.1 Foo ',
        'open': 'open'
      },
      {
        'id': 1143,
        'name': '2.3 Foo ',
        'open': 'open'
      },
      {
        'id': 1132,
        'name': '2.2 Foo ',
        'open': 'open'
      },
    ],
  },
  {
    'id': 30,
    'name': '1 Foo',
    'open': 'open',
    'children': [{
        'id': 1134,
        'name': '1.1 Foo ',
        'open': 'open'
      },
      {
        'id': 1130,
        'name': '1.3 Foo ',
        'open': 'open'
      },
      {
        'id': 1123,
        'name': '1.2 Foo ',
        'open': 'open'
      },
    ],
  },
];


function SortByName(a, b) {
  var aName = a.name.toLowerCase();
  var bName = b.name.toLowerCase();
  return ((aName < bName) ? -1 : ((aName > bName) ? 1 : 0));
}


$(document).ready(function() {
  var sorted_array = arry.sort(SortByName)
  console.log(sorted_array)
})
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<p id='data'>

</p>

Ответы [ 4 ]

4 голосов
/ 07 мая 2020

Вам также необходимо перебрать массив для сортировки всех дочерних элементов. Присваивание не требуется, поскольку Array#sort изменяет массив.

array.forEach(({ children }) => children.sort(sortByName));
1 голос
/ 07 мая 2020

Измените свою функцию, как показано ниже

function SortByName(a, b){
	if(a.children){
  	a.children = a.children.sort(SortByName)
  }
  if(b.children){
  	b.children = b.children.sort(SortByName)
  }
  var aName = a.name.toLowerCase();
  var bName = b.name.toLowerCase();
  return ((aName < bName) ? -1 : ((aName > bName) ? 1 : 0));
}
0 голосов
/ 07 мая 2020

вам нужны 2 функции для сортировки этих объектов, одна для Des c и одна для As c sort следующим образом:

function sortByKeyDesc(array, key) {
    return array.sort(function (a, b) {
        var x = a[key]; var y = b[key];
        return ((x > y) ? -1 : ((x < y) ? 1 : 0));
    });
}
function sortByKeyAsc(array, key) {
    return array.sort(function (a, b) {
        var x = a[key]; var y = b[key];
        return ((x < y) ? -1 : ((x > y) ? 1 : 0));
    });
}

И когда вы хотите отсортировать свои объекты, вы можете передать исходная коллекция и столбец, который вам нужно отсортировать, следующим образом:

  function querySucceeded(data) {
     posts = [];
     posts = sortByKeyDesc(data, "TagName");
  }
0 голосов
/ 07 мая 2020
var updated_sorted_array = sorted_array.map(function(arr){
  arr.children = arr.children.sort(SortByName);
  return arr;
})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...