首页 > 解决方案 > 如何根据给定的外部值重新排序javascript数组

问题描述

从 basic_array 开始,说明[0,1,2,3,...48,49,50]如何使用 6 位值(例如123456)对其重新排序以生成新数组,即类似 [48,2,21,0,...50,33,12](相同长度 + 无重复值)?

目标是为这 6 个数字标识的每个用户创建一个特定的数组。有没有办法做到这一点?

该值123456可以按原样使用,也可以作为数组使用[1,2,3,4,5,6] [12,34,56] [123,456]

我试图扭转 ES6 地图new Map([...basic_array].map((b,i)=>...但没有结果。

标签: javascriptarrayssorting

解决方案


感谢@Yoshi 的建议

<input id="code">
<button onclick="createUserArray()">CREATE ARRAY</button>
<button onclick="newUserCode()">NEW CODE</button>

<script>

newUserCode() // create new 6-digits code onload

function newUserCode(){
    let code = Math.floor(Math.random() * 1000000);
    document.getElementById('code').value = addZeros(code)
}

function addZeros(code) { // constant length: adding 0s if needed
    let full_code = code.toString();
    while ( full_code.length < 6 ) { full_code = "0" + full_code };
    return full_code;
}

function createUserArray(){
    let code_user = parseInt( document.getElementById('code').value ), 
        new_array = createArray( code_user );
        console.log(new_array.join(','));
}

function createArray(code) {
  let basic_array = Array.from({length:51},(v,k)=>k)
  let m = basic_array.length, t, i;
  while (m) {
    i = Math.floor(randomSeed(code) * m--);
    t = basic_array[m];
    basic_array[m] = basic_array[i];
    basic_array[i] = t;
    ++code
  }
  return basic_array;
}

function randomSeed(code) {
  let x = Math.sin(code++); 
  return x - Math.floor(x);
}

// 416444 = [9,33,44,38,31,5,37,19,...,23,0,20,18,49,35]
// 663684 = [41,39,4,34,47,31,...1,32,30,46,19,22,0,23]
// 098141 = [48,42,4,34,16,18,...,0,23,21,46,28,31,1,14]

推荐阅读