2014-06-15 51 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;