-2

我有坐标的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 个随机值。

感谢您的帮助。

4

2 回答 2

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"]
于 2013-08-21T11:54:03.113 回答
1

我会混合使用 javascript 的随机函数和数组的拼接方法。重复数组大于 8 的次数。

http://www.w3schools.com/jsref/jsref_splice.asp

http://www.w3schools.com/jsref/jsref_random.asp

您可以通过生成一个介于 0 和 array.length - 1 之间的数字从数组中的随机位置删除一个元素,然后使用 splice 从数组中剪切该元素。请参阅此答案以删除元素:

如何从 JavaScript 中的数组中删除特定元素?

于 2013-08-21T11:50:42.373 回答