2014-06-15 28 views
0

我有一个多维数组等:变化和缩短多维数组

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

我需要创建一个新的数组,并通过可变因素操纵所述阵列的第二元件。

所以我现在这样做的:

array2.push(new_ar(profile, 20)); 
function new_ar(origin, factor) { 
    var result = [[]]; 
    result = origin.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], ...] 

问题1

现在我需要修改我的功能,并给它一个开始和结束只根据开始和结束值获取该数组的一部分。 喜欢的东西:

function new_ar(origin, start, end, factor) { 
... code ... 
} 

所以newar(profile, 1, 2, 20)将只返回数组的最后两个项目,并与因素操纵它。

问题2

如何设置不同的开始和结束位置。

例如,我需要有机会创建一个从0到10元素和从20到最后一个元素的数组。

我很感激评论和答复。

回答

2

使用.slice

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; 
}; 
+0

会你有一个想法的上述编辑也(见问题2)? – gco

+0

@gco,获得前10名,使用'.slice(0,10)'。获取第20个最后一个,使用'.slice(19)' – Fabricator

+0

我可以结合切片像'origin.slice(开始,结束).slice(end2).map ...'? – gco

1

@gco

同concepts..but小tweaked..it可以帮助

http://jsfiddle.net/S2ejy/2/

var profile = [ 
    ['2001 - 05 - 01', 20], 
    ['2001 - 05 - 02', 23], 
    ['2001 - 05 - 03', 18], 
    ['2001 - 05 - 04', 25] 
]; 
$('span').html('With no start or end :' + new_ar(profile, 20)); 
$('span').html($('span').html() + '<br>With start and no end : ' +new_ar(profile,20,2)); 
$('span').html($('span').html() + '<br>With start and end : ' + new_ar(profile,20,1,2)); 
}); 

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