javascript - 查找数组中的前 k 个元素

标签 javascript jquery arrays

我有一个格式如下的数组:

var series = [[horse,1],[cat,2],[dog,4],[dragon,4],[cow,6]]

为了根据第二个参数找到前 3 个元素,我对数组进行了排序。为此,我使用以下代码:

 series.sort( function(a,b) {
        if (a[1] === b[1]) {
            return 0;
    }
    else {
         return (a[1] < b[1]) ? 1 : -1;
    }
});

效果很好。然后如果我想找到前 3 个,我总是可以选择 [0,2]。但是,如果第 4 个值等于第 3 个值,那么我会错过它。在这种情况下,如果我要求前 3 名,输出应该是 [[horse,1],[cat,2],[dog,4],[dragon,4] 因为 dragon 和 dog 具有相等的值 (4)。所以,我想知道是否有一些我可以开箱即用的库或一些有效的算法来返回前 3 个值,这不一定意味着返回前 3 个元素数组?

最佳答案

只需构建一个列表:

var top = [];
top.push(series[0]);
top.push(series[1]);
for (var i = 2; i < series.length && series[i][1] == series[2][1]; ++i)
  top.push(series[i]);

概括一下(一点):

function top(series, k) {
  var top = [];
  for (var i = ; i < k - 1; ++i)
    top.push(series[i]);
  for (; i < series.length && series[k-1][1] == series[i][1]; ++i)
    top.push(series[i]);
  return top;
}

关于javascript - 查找数组中的前 k 个元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28631667/

相关文章:

jquery - 绑定(bind)事件的最佳方式?

javascript - 过滤合并两个数组,匹配两个字段/列 : Javascript

java - 二维数组对象遇到问题

javascript - LokiJS 自动加载回调不起作用

javascript - 如何设置打印成横向的javascript函数?

javascript - Angular2——使用 NgFor 时,每次 keyup 后双向绑定(bind)文本输入模糊

javascript - jquery 第二次事件没有响应

javascript - 无法在循环内添加 Google 标记

javascript - 需要将每个 post 元素 append 到 slider 的每个 ul li

javascript - 合并维护所有属性的对象数组