在多个项目上切片和映射javascript数组

时间:2014-06-15 11:05:37

标签: javascript arrays multidimensional-array

我有一个多维数组,如:

profile = [[2001-05-01, 20], [2001-05-02, 23], [2001-05-03, 18], ...];

我创建了一个新数组,并通过变量因子操纵数组的第二个元素。

我现在正在做这件事并且有效:

function new_ar(origin, start, end, factor) {
  var result = [[]];
  result = origin.slice(start, end).map(function(item){ return [item[0], parseInt(item[1])*factor]});
  return result;
};

我得到了所需的数组:

array2 = [[2001-05-01, 400], [2001-05-02, 460], [2001-05-02, 360], ...]

问题

如何获得一个新的array3,它由array2的前n个和后m个元素组成? 我需要调用类似

的函数
function new_ar(origin, start1, end1, factor){
...code...
}

例如:我有一个包含200个元素的数组,我需要获得一个包含前100个和最后50个的新数组。这意味着,我需要说从100到149删除。

2 个答案:

答案 0 :(得分:2)

只需slice输出您想要的数组部分,然后concat

…origin.slice(0, start1).concat(origin.slice(end1))…

(假设您的示例中end1150;如果是50则使用.slice(-end1)

答案 1 :(得分:1)

这应该可以帮助你。

多维数组:

profile = [['test_start', 20], ['test_start', 23], [2001-05-03, 18],[2001-05-01, 20], [2001-05-02, 23], [2001-05-03, 18], [2001-05-03, 18],[2001-05-01, 20], [2001-05-02, 23], ['test_end', 18]];

用于迭代数组并仅返回匹配结果的map函数。要在我们的segmentArray函数中调用:

array_map = function(array, mapFunction) {
          var newArray = new Array(array.length);
          for(var i = 0; i < array.length; i++) {
              response = mapFunction(array[i]);
              if(response){
                    newArray[i] = response;
              }
          }
          return newArray;
}

我们调用数组的segmentArray函数:

 Array.prototype.segmentArray = function(start1, end1, factor){

   var array_length = this.length;
   var a = 0;
   var end1 = array_length - end1;
   var array = array_map(this, function(v,i){
       a++;
      return a <= start1 || a > end1 ? v : false;
   });
     return array;

}

用法:

new_arr = profile.segmentArray(start1=2, end1=1, factor=null);
console.log(new_arr);

结果,数组中的前2个和最后1个项目,正如我们在传递的函数参数中设置的那样:

0: Array[2] 
1: Array[2]
2: Array[2]