Javascript:获取数组的每n个元素
我得到了一个数据数量未知的数组。 但我只有预定义的数据量要显示/存储。 如何获取初始数组的第n个元素并在JavaScript中减少它 例如:我得到一个大小为10000的数组,但只能显示n=2k个元素 我是这样试的: delta=Math.round(10*n/size)/10=0.2->取初始数组的每5个元素Javascript:获取数组的每n个元素,javascript,arrays,Javascript,Arrays,我得到了一个数据数量未知的数组。 但我只有预定义的数据量要显示/存储。 如何获取初始数组的第n个元素并在JavaScript中减少它 例如:我得到一个大小为10000的数组,但只能显示n=2k个元素 我是这样试的: delta=Math.round(10*n/size)/10=0.2->取初始数组的每5个元素 for (i = 0; i < oldArr.length; i++) { arr[i] = oldArr[i].filter(function (value, index, a
for (i = 0; i < oldArr.length; i++) {
arr[i] = oldArr[i].filter(function (value, index, ar) {
if (index % delta != 0) return false;
return true;
});
}
for(i=0;i
对于0.2,它总是0,但是对于其他一些增量(0.3),它是有效的。对于delta=0.4也一样,i可以工作,但是每一秒的元素都是这样。我该怎么做才能让它正常工作?试试看
arr = oldArr.filter(function (value, index, ar) {
return (index % ratio == 0);
} );
其中,如果希望arr
为oldArr
的1/2,则比率为2;如果希望它为oldArr
的1/3,则比率为3,依此类推
ratio = Math.ceil(oldArr.length / size); // size in the new `arr` size
您在循环中对oldAdd
的每个元素调用filter()
,您应该对整个数组调用filter()
,以获取新的筛选数组。filter本身返回一个数组。如果我理解正确的话,你就不需要周围的循环。因此:
newArr = oldArr.filter(function(value, index, Arr) {
return index % 3 == 0;
});
将在oldArr中将newArr设置为每三个值。可能有一种解决方案:
避免使用过滤器,因为您不想循环超过10000个元素!
只需使用for循环直接访问它们
var log=function(val){document.body.innerHTML+=''+val+''}
var oldArr=[0,1,2,3,4,5,6,7,8,9,10]
var-arr=[];
var-maxVal=5;
var delta=数学楼层(oldArr.length/maxVal);
//避免使用过滤器,因为您不希望
//循环超过10000个元素!
//只需使用for循环直接访问它们!
// |
//五
对于(i=0;i借用,从给定数组生成具有所需索引的新数组
:
(每3个项取一个)
Array.prototype.take=函数(n){
如果(!Number(n)&&n!==0){
抛出新的TypeError(`Array.take需要传入一个数字。传入${typeof n}`);
}else如果(n这个[索引*n+1]);
};
[1,2,3,4,5,6,7,8]。取(2);//=>2, 4, 6, 8
这也可以通过使用创建新数组而不迭代旧数组中的所有元素来实现
//创建包含10k条目的数组
const oldArr=[…数组(10000)].map((_el,i)=>i);
常数max=10;
常数增量=数学地板(旧长度/最大值);
const newArr=[…数组(最大)].map((_el,i)=>(
oldArr[i*delta]
) );
控制台日志(newArr)代码>什么是n
?什么是k
?什么是增量
?什么是oldArr
?如何delta=size/n
?0.2均匀地除以所有整数,因此someInt%0.2==0
始终。我想你想要someInt%(1/0.2)
,即someInt%5
@James1%0.2
为我产生0.1999999999996
,因为@Oriol你是对的1%0.25
有效(因为我认为0.25可以精确地用二进制表示),我想在JS中对非整数操作数使用模运算符是个坏主意。它不应该是Math.ceil()
来防止新数组大于所需大小吗?谢谢,我想就是这样。特别是因为这应该比模检验更快。我没有10k元素。它是一个2D数组,所以在另一个版本中甚至会有100k的检查。