javascript - 如何根据给定的外部值重新排序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)=>...
但没有结果。
解决方案
感谢@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]
推荐阅读
- ios - 代码中的 UITabBarController 不显示导航栏
- android - 更改导航抽屉中菜单标题标题项的文本颜色
- php - PHP忘记密码恢复
- r - 如何按月重新排序数据框的行?
- git - 在 windows 终端中使用 TFVC
- node.js - 尝试使用 API Gateway 和 Lambda 从 S3 提供图像文件会导致文件损坏
- mysql - 有没有办法选择一个值,其他相同的值转换为 null
- javascript - 用javascript检测网页滚动
- react-native - 如果 Firebase 成功 Auth 另一个页面 React Native
- express - 如何调试警告:预期的服务器 HTML 包含匹配项