Фильтровать массив Javascript на основе первого целого числа каждого элемента массива

У меня есть такой массив:

var array = [102,103,104,201,203,204,303,301,302,405,406,408,101];

Я хочу иметь возможность возвращать массив на основе первого целого числа каждого члена массива следующим образом:

newArray = [101,102,103,104];

Массив будет возвращен на основе чего-то похожего на это выражение:

array[i]/100|0 === j;

где j может быть 1,2,3 или 4.

eg. 405/100|0 === 4 // partition into the array starting with 4.

Кто-нибудь знает способ, которым я мог бы эффективно фильтровать этот массив в другой на основе первого числа?

Я думаю, что этот вопрос должен быть, почему я не могу использовать функцию фильтра lodash? работает только с коллекциями? зачем мне здесь использовать JS .filter?

3 ответа

Решение

Вы могли бы использовать .filter(), как это:

function filterDigit(array, j) {
     return array.filter( x => Math.floor(x/100) == j);
}

var array = [102,103,104,201,203,204,303,301,302,405,406,408,101];
var newArray = filterDigit(array, 1);
console.log(newArray);

Вы можете разделить числа на 100 и использовать их как индекс для массива результатов.

var array = [102, 103, 104, 201, 203, 204, 303, 301, 302, 405, 406, 408, 101],
    result = [];

array.sort(function (a, b) { return a - b; });
array.filter(function (a) {
    var index = Math.floor(a / 100) - 1;
    result[index] = result[index] || [];
    result[index].push(a);
});

console.log(result);

Создайте список с подобными списками

  var PARTISION_DIVISOR = 100 
  var array = [102,103,104,201,203,204,303,301,302,405,406,408,101];

  array.sort()
  var new_list = []
  for (var i = 0; i<array.length; i++) {
    sub_index = (array[i] / PARTISION_DIVISOR) 
    sub_index = Math.floor(sub_index)
    new_list[sub_index] = new_list[sub_index] || []
    new_list[Math.floor(sub_index)].push(array[i])
  }

  new_list

введите описание изображения здесь

Проверьте рабочий пример https://repl.it/ExSY

Другие вопросы по тегам