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

时间:2017-03-06 11:56:11

标签: 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 is not a function

另外,在我写这篇文章时,我意识到这仅在array.length/extraLength是偶数时有效,所以在上面的例子中,它不起作用。

我怎样才能做到这一点?

2 个答案:

答案 0 :(得分:3)

  

这会导致错误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);

  

我希望数组长度为3,但我不想删除   连续元素。我想从数组中均匀地删除元素。

     

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

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

要做到这一点,只需将数组的length除以desired sizefloor即可,以避免分数。添加一个将允许您具有适合奇数大小数组的delta step factor

完成后,您只需使用计算的delta因子的step大小迭代数组。

示例

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是偶数,则更改代码以考虑。必须回滚floor ed delta因子上的增量。这将使其更均匀地分布。感谢 @Andrey Popov 的评论。

答案 1 :(得分:0)

您可以使用以下代码来满足要求。

var array = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i']
var l =  array.length;
for (var j = 0; j <l; j++){
      if (j!= 0) {
      array.pop();
    }
}
console.log(array);

如果它能解决您的问题,请告诉我。