根据每个数组项

时间:2016-12-27 13:17:35

标签: javascript arrays lodash

我有一个这样的数组:

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 个答案:

答案 0 :(得分:2)

您可以将数字除以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);

答案 1 :(得分:2)

您可以使用.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);




答案 2 :(得分:0)

创建一个包含此列表的列表

  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

enter image description here

查看工作示例https://repl.it/ExSY