在多个项目上切片并映射javascript数组
我有一个多维数组,如:在多个项目上切片并映射javascript数组,javascript,arrays,multidimensional-array,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(ite
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。这应该能让你达到目的 多维数组:
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]];
一个映射函数,用于迭代数组并仅返回匹配的结果。要在我们的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;
}
用法:
new_arr = profile.segmentArray(start1=2, end1=1, factor=null);
console.log(new_arr);
结果是数组中的前2项和后1项,正如我们在传递的函数params中设置的:
0: Array[2]
1: Array[2]
2: Array[2]
只需
切片
取出您想要的数组部分,然后再将它们切掉
(假设您的示例中
end1
为150
;如果50
,则使用.slice(-end1)
)您是否考虑过使用Array.prototype.splice
?您好,我已经在使用slice了,正如您在“函数新建”中看到的那样。据我所知,slice得到了数组的连续部分。例如n到m。但是我需要得到n到m,x到y。切片
vs.拼接
我说的是哦,是的。我试过了,但不知道如何设置参数。是否可以将其他值设置为null而不是删除它们?解决方案:result=origin.slice(0,start2).concat(origin.slice(end2)).concat(origin.slice(start2,end2).map(函数(项){return[item[0],0]}代码>当然有可能,但不能仅通过切片
+concat
。我建议只使用映射
,并有条件地(基于索引)从回调返回null
——这只是另一个转换。您是故意对它们进行排序的吗?如果没有,您不需要任何切片和concat:.map(函数(项,索引){If(索引>=start2&&index
我想我在过去的3个小时里停电了。通过result=origin.map(函数(item,index){if(index=end)返回[item[0],0];else返回item;})对其进行了调整。
0: Array[2]
1: Array[2]
2: Array[2]
…origin.slice(0, start1).concat(origin.slice(end1))…