Я хочу отсортировать массив в соответствии с другим массивом в javascript? - PullRequest
1 голос
/ 02 апреля 2020

мой друг написал этот код для меня, но, к сожалению, я не могу полностью понять этот код, я знаю, что делают методы pu sh, filter и forEach Но я не могу понять, что произошло в функции, поэтому я ищу краткое объяснение функции. И спасибо.

items = [ 
    ['Anne', '1'],
    ['Bob', '2'],
    ['Henry', '3'],
    ['Andrew', '4'],
    ['Jason', '5'],
    ['Thomas', '6']
]

sorting = [ '1', '2', '3', '4', '5', '6' ];
result = []
sorting.forEach(function(key) {
    var found = false;
    items = items.filter(function(item) {
        if(!found && item[1] == key) {
            result.push(item);
            found = true;
            return false;
        } else 
            return true;
    })
})

result.forEach(function(item) {
    document.writeln(item[0])
}) 

Ответы [ 2 ]

1 голос
/ 02 апреля 2020

Вызов filter() отфильтровывает первый элемент массива, номер которого совпадает с key. Переменная found используется для остановки фильтрации после нахождения соответствия, остальная часть массива возвращается без изменений.

И во время фильтрации она помещает этот элемент в список результатов.

Более простой способ написать это будет:

sorting.forEach(function(key) {
  var index = items.findIndex(item => item[1] == key);
  if (index != -1) {
    result.push(items[index]);
    items.splice(index, 1);
  }
})
0 голосов
/ 02 апреля 2020

Вместо фильтрации каждого элемента данных со странным подходом, вы можете выполнить прямую сортировку, получив индексы элементов и приняв значение дельты в качестве значения сортировки.

Этот подход требует Array#sort с дельтой, которая определяет отношение между двумя элементами.

var items = [['Andrew', '4'], ['Bob', '2'], ['Anne', '1'], ['Henry', '3'], ['Jason', '5'], ['Thomas', '6']],
    sorting = [ '1', '2', '3', '4', '5', '6' ];

items.sort((a, b) => sorting.indexOf(a[1]) - sorting.indexOf(b[1]));

console.log(items);
.as-console-wrapper { max-height: 100% !important; top: 0; }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...