我有坐标的JS数组:
var markers = xmlDoc.documentElement.getElementsByTagName("marker");
var waypoints = new Array();
for (var i = 0; i < markers.length; i++) {
point = new google.maps.LatLng(
parseFloat(markers[i].getAttribute("lat")),
parseFloat(markers[i].getAttribute("lon")));
waypoints.push({location: point, stopover: false});
}
我需要过滤数组,并且只留下8个随机值,如果数组长度为> 8。
感谢您的帮助。
答案 0 :(得分:2)
要解决这个问题,您需要能够在0
和length - 1
之间创建一个随机整数,然后在循环中Array.prototype.splice
出该项指数的项目,直到达到您想要的长度。
function randInt(max, min) {
return ((min | 0) + Math.random() * (max + 1)) | 0;
}
function remRandom(arr, newLength) {
var a = arr.slice();
while (a.length > newLength) a.splice(randInt(a.length - 1), 1);
return a;
}
var foo = ['a', 'b', 'c', 'd', 'e', 'f'];
remRandom(foo, 3); // e.g. ["b", "c", "e"]
答案 1 :(得分:1)
我会使用javascript随机函数和数组拼接方法的混合。对阵列大于8的次数执行此操作。
http://www.w3schools.com/jsref/jsref_splice.asp
http://www.w3schools.com/jsref/jsref_random.asp
你可以通过生成一个介于0和array.length之间的数字来从数组中的随机位置删除一个元素 - 然后使用splice从数组中删除该元素。请参阅此答案以删除元素:
How do I remove a particular element from an array in JavaScript?