除了使用JQuery的第一个和最后一个索引之外,如何编写一个随机化数组的函数

时间:2017-05-20 15:42:25

标签: javascript jquery

如果这是一个愚蠢的问题,总新手如此道歉。我尝试编写一个函数,它接受任意长度的数组并随机化所有索引,除了第一个和最后一个索引。所以基本上我想删除第一个和最后一个索引,然后将剩余的索引洗牌,然后将删除的索引重新附加到原来的位置。

例如

var anyArray = ['ONE', 'two', 'three', 'four', 'five', 'six', 'seven', 'eight', 'nine', 'TEN'];

并返回类似

的内容

var anyArray = ['ONE', 'six', 'nine', 'four', 'eight', 'two', 'five', 'three', 'seven', 'TEN'];

3 个答案:

答案 0 :(得分:0)

首先你需要一些改组算法。取自这个答案https://stackoverflow.com/a/10142256/446792

$this->cartModel = new CartModel();

然后保存第一个和最后一个元素,排序数组,恢复第一个和最后一个元素。

Array.prototype.shuffle = function() {
  var i = this.length, j, temp;
  if ( i == 0 ) return this;
  while ( --i ) {
     j = Math.floor( Math.random() * ( i + 1 ) );
     temp = this[i];
     this[i] = this[j];
     this[j] = temp;
  }
  return this;
}

答案 1 :(得分:0)

与评论一样,查看洗牌算法。 如果您需要仅提取中间的那些然后重新附加,请尝试按照

let inner = anyArray.splice(1, anyArray.length-2)
shuffle(inner)
inner.unshift(anyArray[0]);
inner.push(anyArray[1]);

答案 2 :(得分:0)

Array#sort()接受回调作为第一个参数,这样你就可以告诉程序如何对你的数组进行排序,你可以使用它来对数组进行重排。

此功能可以满足您的需求:

Array.prototype.shuffleLeaveFL = function() {
  var arr = [];
  for(let i=1; i<this.length-1; i++){ arr.push(this[i]); }
  arr.sort(function() { return 0.5 - Math.random() }); // shuffle array
  arr.push(this[this.length-1]); // add old last element to arr
  arr.unshift(this[0]); // add old first element to front of arr
  return arr;
}

var array = ["FIRST", "two","three","four","five","six","seven","eight","nine", "LAST"];

// simply use this on any Array

console.log(array.shuffleLeaveFL());

排序方法取自CSS-Tricks