javascript - 根据数组中的位置从数组中获取代表元素

标签 javascript algorithm filter underscore.js

这个疑问是关于 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', 'Sep', 'Dec']
  • 等等...

要求:

  1. 我总是想要第一个和最后一个元素
  2. 项目数量将是 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' ]

关于javascript - 根据数组中的位置从数组中获取代表元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15245852/

相关文章:

algorithm - 0/1 背包澄清和优化

algorithm - 在 O(1) 预期时间和 O(logn) 最坏情况下确定集合中是否存在整数

algorithm - 为什么选择排序不贪心

AngularJs orderBy 将日期作为字符串处理

javascript - XMLHttpRequest 无法加载 *...* 来源 : * is not allowed by Access-Control-Allow-Origin - ON THE SAME SERVER

JavaScript 时钟字体大小

html - 右对齐 HTML 输入字段中的文本

jquery - 使用jquery过滤表格单元格的显示

javascript - 全局变量在 jquery/javascript 中如何工作? (初学者级)

javascript - Backbone.js - 如何处理 "login"?