相对从数组中选取X个值

文尼

我正在尝试从数组中相对选择X值。例如,我想从以下数组中选择4个值:

arr = [1,2,3,4,5,6,7,8,9]

我现在正在做的是:

var newArr = [];
var pick = 4;
var delta = arr.length/pick;

for (i = 0; i < arr.length; i = i + delta) {
    k = Math.floor(i);
    newArr.push(arr[k]);
};

// then I'm cheating a bit
newarr[newArr.length-1] = arr[newArr.length-1];

我的问题是,在某些值(我在更长的数组上使用它)上,新数组比定义的pick变量更长。这与增量和随后的舍入有关,后者有时会附加一个值。

有人知道如何正确执行此操作吗?预期结果应为以下之一:

newArr = [1,3,6,9] || newArr = [1,4,6,9] || newArr = [1,4,7,9]
亭子

主要问题在以下行中:

var delta = arr.length/pick;

使用此delta值,您将使arr.length循环的最后一次迭代中得出该值,这不是有效的索引。它应该(根据您的请求)到达数组的最后一个元素。另外,您也想从第一个值开始,因此您的增量应该更大(间隔由pick-1的部分确定),因此上面的语句应该是:

if (pick == 1) return [arr[0]]; // exceptional case
var delta = (arr.length-1)/(pick-1);

要处理浮点错误,最好使用,而round不是floor,这样,如果在最后一次迭代中i的值比其小一小部分arr.length-1,仍将以该索引为目标。

为绝对确保生成所需数量的值,应使该数量计入循环条件。

最后,您似乎还想从数组中的第一个值开始,因此这意味着您不应该在选择第一个值之后才将增量添加到i值中。

综合所有这些,您可以达到以下功能:

function pickFrom(arr, pick) {
  if (pick == 1) return [arr[0]]; // exceptional case
  var newArr = [];
  var delta = (arr.length-1)/(pick-1);
  var k, i = 0;

  while (pick--) {
    k = Math.round(i);
    newArr.push(arr[k]);
    i = i + delta;
  }
  return newArr;
}

var arr = [1,2,3,4,5,6,7,8,9]
var res = pickFrom(arr, 4);
console.log(res);
.as-console-wrapper { max-height: 100% !important; top: 0; }

注意:请始终使用var(或constlet)定义变量。

备用代码

这是实现相同功能的简洁ES6函数:

function pickFrom(arr, pick) {
  var delta = (arr.length-1)/Math.max(1, pick-1);
  return Array.from(Array(pick), (_, i) => arr[Math.round(i*delta)])
}

var arr = [1,2,3,4,5,6,7,8,9]
var res = pickFrom(arr, 4);
console.log(res);
.as-console-wrapper { max-height: 100% !important; top: 0; }

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

根据先前的值从数组中选取值

来自分类Dev

从对象中选取给定属性的值到数组中

来自分类Dev

Python:从数组中选取某个元素

来自分类Dev

从多个数组中选取元素

来自分类Dev

从Go Slice中选取随机值

来自分类Dev

VBA-从列表中选取一个值而无需重复

来自分类Dev

从数组中选取等于某个数字的数组

来自分类Dev

如何从JavaScript中的对象数组中选取属性?

来自分类Dev

从JS数组中选取随机句子作为响应

来自分类Dev

如何从数组中选取数据并从中创建单个对象?

来自分类Dev

从对象数组中选取数据并返回新对象

来自分类Dev

Kotlin从列表中选取x元素,但先删除最小的元素

来自分类Dev

Matplotlib:如何绘制一个x值的一维数组,其中y轴与热图相对应?

来自分类Dev

jmeter:需要执行 x 个 http 请求,每个请求包含从 JSON 提取器结果中选取的 3 个对象,每 3 个

来自分类Dev

在具有 2 列 a 和 b 的二维数组中。对于 a 列中的所有相同值,从 php 中的 b 列中选取相应的值?

来自分类Dev

Python Selenium xPath从div类中选择一个相对值

来自分类Dev

从两个不同的数组中选择最接近的值

来自分类Dev

在我的数组中选择2个随机值

来自分类Dev

在oneliner中选择数组中的n个最大值

来自分类Dev

如何从数组中选择一个值?

来自分类Dev

从基于var的数组中选择一个值

来自分类Dev

从JSON数组中选择一个特定的值

来自分类Dev

从两个不同的数组中选择最接近的值

来自分类Dev

Unserscore模板-如何从数组中选择一个值?

来自分类Dev

从基于var的数组中选择一个值

来自分类Dev

如何从两个数组中选取元素,以使总和之间的差异最小

来自分类Dev

从数组中选取两个数字,以使总和为常数

来自分类Dev

如何从MONGO文档中的嵌入式数组中选取多个元素

来自分类Dev

从向量中选取“随机”元素

Related 相关文章

  1. 1

    根据先前的值从数组中选取值

  2. 2

    从对象中选取给定属性的值到数组中

  3. 3

    Python:从数组中选取某个元素

  4. 4

    从多个数组中选取元素

  5. 5

    从Go Slice中选取随机值

  6. 6

    VBA-从列表中选取一个值而无需重复

  7. 7

    从数组中选取等于某个数字的数组

  8. 8

    如何从JavaScript中的对象数组中选取属性?

  9. 9

    从JS数组中选取随机句子作为响应

  10. 10

    如何从数组中选取数据并从中创建单个对象?

  11. 11

    从对象数组中选取数据并返回新对象

  12. 12

    Kotlin从列表中选取x元素,但先删除最小的元素

  13. 13

    Matplotlib:如何绘制一个x值的一维数组,其中y轴与热图相对应?

  14. 14

    jmeter:需要执行 x 个 http 请求,每个请求包含从 JSON 提取器结果中选取的 3 个对象,每 3 个

  15. 15

    在具有 2 列 a 和 b 的二维数组中。对于 a 列中的所有相同值,从 php 中的 b 列中选取相应的值?

  16. 16

    Python Selenium xPath从div类中选择一个相对值

  17. 17

    从两个不同的数组中选择最接近的值

  18. 18

    在我的数组中选择2个随机值

  19. 19

    在oneliner中选择数组中的n个最大值

  20. 20

    如何从数组中选择一个值?

  21. 21

    从基于var的数组中选择一个值

  22. 22

    从JSON数组中选择一个特定的值

  23. 23

    从两个不同的数组中选择最接近的值

  24. 24

    Unserscore模板-如何从数组中选择一个值?

  25. 25

    从基于var的数组中选择一个值

  26. 26

    如何从两个数组中选取元素,以使总和之间的差异最小

  27. 27

    从数组中选取两个数字,以使总和为常数

  28. 28

    如何从MONGO文档中的嵌入式数组中选取多个元素

  29. 29

    从向量中选取“随机”元素

热门标签

归档