我有一个数组: 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/