将数组的随机正值转换为负数

时间:2015-12-26 23:18:28

标签: javascript arrays

我是JS的新人。我有一个乱码数组,需要将数组的随机正值转换为负数。那时我只知道如何随机化数组:

var myArray = [1,2,3,4,5,6,7,8,9,10];
myArray.sort(function() {
    return 0.5 - Math.random()
}) 

但需要结果看起来像这样: [8,-2,3,9,-5,-1,4,7,6,-10]

请建议。谢谢!

5 个答案:

答案 0 :(得分:2)

myArray.forEach(function(i,j){

if(i>0){

  var negative=i*(-1);/*convert your positive values to negative*/
  myArray[j]=negative;

}

})

答案 1 :(得分:1)

改进的Fisher-Yates随机抽取随机否定项目

function shuffle2(arr) {
    var i, j, e;
    for (i = 0; i < arr.length; ++i) { // for every index
        j = Math.floor(Math.random() * (arr.length - i)); // choose random index to right
        e = arr[i]; // swap with current index
        arr[i] = arr[i + j];
        arr[i + j] = e;
        if (.5 > Math.random()) // then, randomly
            arr[i] = -arr[i]; // flip to negative
    }
    return arr;
}

现在可以做到

shuffle2(myArray); // [-5, 2, 6, -7, -10, 1, 3, -4, -9, -8]

请注意,如果您要在arr.length - 1处停止循环,则需要在循环外进行最后一次随机翻转以获取最后一个索引

答案 2 :(得分:0)

您可以使用Array.prototype.map()转换数组,以获得随机+/-,如下所示:

myArray = myArray.map(function(item) {
    return Math.random() > 0.5 ? item : -item; // random +/-
});

Map函数不会修改您的数组,只会返回新映射的数组(因此您必须重新分配它或分配给新变量)。

答案 3 :(得分:0)

如何为positiv / negative(翻转硬币)添加第二个随机数:

var pos = Math.floor(Math.random()*10) % 2;
var num = Math.random() * 10;
var result;
// pos will evaluate false if it is 0
// or true if it is 1
result = pos ? num : -num;

return result;

答案 4 :(得分:0)

由于你是新来者,这是最简单的方法。已使用for loopMath.floor()

  1. 首先随机化数组。
  2. 使用for loopfor (i = 0; i < 10; i++){ var arrVal = myArray[Math.floor( Math.random()*myArray.length);] if(arrVal > 0){ arrVal = arrVal*(-1); }; }; 生成随机数并更改与数值对应的索引值eg-
  3. std::map<double, std::multimap<int, dnode*> *> m_ptable;