2013-03-06 76 views
0

這個疑問是關於underscore.js的,但可以用普通的javascript來解決。根據陣列中陣列的位置獲取數組中的代表元素

假設我們有一個陣列

['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'] 

根據一個參數,我想只顯示X數組的代表性元素。

例如。

  • 如果我想要2個元素。對我而言,代表將是:['Jan','Dec']
  • 對於3個元素:['Jan','Jul','Dec']
  • 對於4個元素:['Jan','Apr 」, '月', '月']
  • 等等...

Requeriments:

  1. 我總是想第一個和最後一個元素
  2. 項目的數量爲2或更多

由於

+0

我不是很肯定,如果我明白你的問題,但你希望提取數組項的子集? – 2013-03-06 11:16:52

回答

2

由你的例子的模式來判斷,「代表」是從中間的第一,最後和N-2的元件。

function representative(arr, n) { 
    n = Math.max(n, Math.min(arr.length, 2)); 
    var offset = (arr.length - 1)/(n - 1); 
    var out = []; 
    for(var i = 0; i < arr.length; i += offset) out.push(arr[0|Math.round(i)]); 
    return out; 
} 

var months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']; 
console.log(representative(months, 2)); 
console.log(representative(months, 3)); 
console.log(representative(months, 4)); 

似乎工作,雖然的「中間」的定義是高達辯論......

// output 
[ 'Jan', 'Dec' ] 
[ 'Jan', 'Jul', 'Dec' ] 
[ 'Jan', 'May', 'Aug', 'Dec' ] 
+0

完美。中間需要辯論,但在這種情況下,我不認爲這是個問題。再次感謝 – 2013-03-06 11:30:48