Javascript 使用月份中的日期对数组进行排序
Javascript sort array using day of month
我想根据日期更改字符串的顺序。
例如,如果单词是“PIZZAS”,5 月 1 日将是“ZZSIPA”,5 月 2 日将是“APIZZS”等...
我 运行 的代码适用于 Math.random(),但是当我为其分配月份中的第几天的值时,它并没有改变。
const dayOfMonth = new Date().getDate();
function shuffle(s) {
var arr = s.split('');
for (let i = arr.length -1; i > 0; i--) {
let j = Math.floor(dayOfMonth * i)
let k = arr[i]
arr[i] = arr[j]
arr[j] = k
}
s = arr.join('');
return s; // Return shuffled string
}
var s = shuffle("PIZZAS");
Math.random()
returns a float between 0 and 1, new Date().getDate()
returns 一个介于 1 和 31 之间的整数,因此如果您想获得相同的行为,您应该将一个月中的第几天除以 31。
但请注意,这个 pseudo-random 数字生成器不是很好,使用 question about seeding JS random number generator.
中的内容可能会得到不太可预测的结果
通过使用'Math.sin(dayOfMonth++) * 10000',问题解决了。
var dayOfMonth = new Date().getDate();
function random() {
var x = Math.sin(dayOfMonth++) * 10000;
return x - Math.floor(x);
}
function shuffle(s) {
var arr = s.split('');
for (let i = arr.length -1; i > 0; i--) {
let j = Math.floor(random() * i)
let k = arr[i]
arr[i] = arr[j]
arr[j] = k
}
s = arr.join('');
return s; // Return shuffled string
}
var s = shuffle("PIZZAS");
您的随机播放失败,因为您正在交换未定义的。
我已经调试了你的代码,shuffle(s)
函数的实现没有改变。
并且 shuffle_new(s)
将通过使用 modulo operator 解决交换未定义的问题:let j = Math.floor(dayOfMonth * i) % arr.length
,因此 arr[j]
永远不会 returns 未定义。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Shuffle Demo</title>
</head>
<body>
<script>
const writeln = (text = '') => document.writeln(text + '<br/>');
</script>
<script>
const dayOfMonth = new Date().getDate();
function shuffle(s) {
var arr = s.split('');
for (let i = arr.length - 1; i >= 0; i--) {
writeln();
let j = Math.floor(dayOfMonth * i)
writeln('j:' + j);
let k = arr[i]
writeln('k:' + k);
arr[i] = arr[j]
writeln('arr[j]:' + arr[j]);
arr[j] = k
writeln('arr:' + arr);
}
s = arr.join('');
return s; // Return shuffled string
}
function shuffle_new(s) {
var arr = s.split('');
for (let i = arr.length - 1; i >= 0; i--) {
writeln();
let j = Math.floor(dayOfMonth * i) % arr.length
writeln('j:' + j);
let k = arr[i]
writeln('k:' + k);
arr[i] = arr[j]
writeln('arr[j]:' + arr[j]);
arr[j] = k
writeln('arr:' + arr);
}
s = arr.join('');
return s; // Return shuffled string
}
writeln('dayOfMonth:' + dayOfMonth);
writeln('process: shuffle("PIZZAS")');
var s = shuffle("PIZZAS");
writeln('output:' + s);
writeln();
writeln();
writeln();
writeln();
writeln('process: shuffle_new("PIZZAS")');
var s = shuffle_new("PIZZAS");
writeln('output:' + s);
</script>
</body>
</html>
我想根据日期更改字符串的顺序。
例如,如果单词是“PIZZAS”,5 月 1 日将是“ZZSIPA”,5 月 2 日将是“APIZZS”等...
我 运行 的代码适用于 Math.random(),但是当我为其分配月份中的第几天的值时,它并没有改变。
const dayOfMonth = new Date().getDate();
function shuffle(s) {
var arr = s.split('');
for (let i = arr.length -1; i > 0; i--) {
let j = Math.floor(dayOfMonth * i)
let k = arr[i]
arr[i] = arr[j]
arr[j] = k
}
s = arr.join('');
return s; // Return shuffled string
}
var s = shuffle("PIZZAS");
Math.random()
returns a float between 0 and 1, new Date().getDate()
returns 一个介于 1 和 31 之间的整数,因此如果您想获得相同的行为,您应该将一个月中的第几天除以 31。
但请注意,这个 pseudo-random 数字生成器不是很好,使用 question about seeding JS random number generator.
中的内容可能会得到不太可预测的结果通过使用'Math.sin(dayOfMonth++) * 10000',问题解决了。
var dayOfMonth = new Date().getDate();
function random() {
var x = Math.sin(dayOfMonth++) * 10000;
return x - Math.floor(x);
}
function shuffle(s) {
var arr = s.split('');
for (let i = arr.length -1; i > 0; i--) {
let j = Math.floor(random() * i)
let k = arr[i]
arr[i] = arr[j]
arr[j] = k
}
s = arr.join('');
return s; // Return shuffled string
}
var s = shuffle("PIZZAS");
您的随机播放失败,因为您正在交换未定义的。
我已经调试了你的代码,shuffle(s)
函数的实现没有改变。
并且 shuffle_new(s)
将通过使用 modulo operator 解决交换未定义的问题:let j = Math.floor(dayOfMonth * i) % arr.length
,因此 arr[j]
永远不会 returns 未定义。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Shuffle Demo</title>
</head>
<body>
<script>
const writeln = (text = '') => document.writeln(text + '<br/>');
</script>
<script>
const dayOfMonth = new Date().getDate();
function shuffle(s) {
var arr = s.split('');
for (let i = arr.length - 1; i >= 0; i--) {
writeln();
let j = Math.floor(dayOfMonth * i)
writeln('j:' + j);
let k = arr[i]
writeln('k:' + k);
arr[i] = arr[j]
writeln('arr[j]:' + arr[j]);
arr[j] = k
writeln('arr:' + arr);
}
s = arr.join('');
return s; // Return shuffled string
}
function shuffle_new(s) {
var arr = s.split('');
for (let i = arr.length - 1; i >= 0; i--) {
writeln();
let j = Math.floor(dayOfMonth * i) % arr.length
writeln('j:' + j);
let k = arr[i]
writeln('k:' + k);
arr[i] = arr[j]
writeln('arr[j]:' + arr[j]);
arr[j] = k
writeln('arr:' + arr);
}
s = arr.join('');
return s; // Return shuffled string
}
writeln('dayOfMonth:' + dayOfMonth);
writeln('process: shuffle("PIZZAS")');
var s = shuffle("PIZZAS");
writeln('output:' + s);
writeln();
writeln();
writeln();
writeln();
writeln('process: shuffle_new("PIZZAS")');
var s = shuffle_new("PIZZAS");
writeln('output:' + s);
</script>
</body>
</html>