javascript - 将数组的大小/长度减少到一定的大小/长度

标签 javascript arrays

我有一个数组: var array = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i' ]
我希望数组的长度为3,但我不想删除连续的元素。我想从数组中均匀地删除元素。

由于array.length是9,我想从中删除6个元素,并且我总是想保留第一个元素。所以在这种情况下, var array 就像 ['a', 'e', 'i']

到目前为止我是这样做的:

var extraLength = array.length - 3;
var eachVal = Math.round(array.length/extraLength);

for (var j = 0; j < extraLength; j++){
  for(var i = array.length -1; i >= 0; i-- ) {
    if (i == eachVal*j && i != 0) {
      array.splice(i, 1)
    }
  }
}

这给出了一个错误,指出array.splice不是一个函数

此外,当我写这篇文章时,我意识到这仅在 array.length/extraLength 为偶数时才有效,因此在上面的示例中,它不起作用。

我怎样才能实现这个目标?

最佳答案

This gives an error saying array.splice is not a function.

至少对于您在问题中提供的代码来说没有错误。请参阅下面的代码片段以了解代码的结果:

var array = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i'];
var extraLength = array.length - 3;
var eachVal = Math.round(array.length/extraLength);

for (var j = 0; j < extraLength; j++){
  for(var i = array.length -1; i >= 0; i-- ) {
    if (i == eachVal*j && i != 0) {
      array.splice(i, 1)
    }
  }
}
console.log(array);


I want the array to be a length of 3, but I don't want to remove the consecutive elements. I want to remove elements evenly from an array.

Since array.length is 9, I want to remove 6 elements from it and I always want to keep the first element. so in this case, var array would be like ['a', 'e', 'i']

但是,这只是一种用例。您想如何处理奇数/偶数大小的数组?我假设,您的基本要求是根据数组的长度和所需的结果大小删除具有一定增量的元素。通过 chop 尾随元素就可以了。

要做到这一点很容易,只需将数组的长度除以您的所需大小,然后对其进行取整以避免分数。添加 1 将允许您获得适合奇数大小数组的增量步长因子

完成后,您只需使用计算出的增量因子的步长大小迭代数组即可。

示例:

var array = [
      ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i'], 
      ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h'], 
      ['a', 'b', 'c', 'd', 'e']
    ], 
    factor, result, desiredSize = 3;

for (i=0; i < array.length; i++) {
  // calculate the delta factor
  factor = Math.floor(array[i].length / desiredSize) + 1;
  factor = (desiredSize % 2 === 0) ? --factor : factor;
  result = [];

  // iterate with the step size of the calculated facor
  for (j = 0; j < array[i].length; j = j + factor) {
    result.push(array[i][j]);
  }
  console.log(result);
}

在上面的示例中,我使用嵌套数组来显示不同长度的多个数组,以保持代码大小紧凑。检查控制台以查看每个数组的结果。

编辑:

更改了代码以考虑 desiredSize 是否为偶数。必须只回滚下限增量因子的增量。这将使其分布更加均匀。谢谢@Andrey Popov 的评论。

关于javascript - 将数组的大小/长度减少到一定的大小/长度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42625033/

相关文章:

javascript - 在光标所在的 TinyMCE 编辑器中插入文本

java - 数组 JLabel ActionListener 多个 JPanel

JavaScript 数组保留未定义的元素

javascript - 查询指针数组 Mongoose Node.js

javascript - 如何在 android 中使用 HTML/CSS 赋予文本渐变颜色

javascript - Ajax/jQuery Django 刷新元素类

javascript - 如何将数据添加到模式 PHP、MySQL Ajax

javascript - jquery 中 $.each 的问题

php - 在数组的每个可能组合中创建几个单词

python - For循环在Beautiful Soup中迭代div