如何打乱 json 数组内的数据顺序

2015-12-22 16:03:27 +08:00
 loading
年会抽题目的要求,防止泄露(怕提前知道题目,选简单的题号),需要对存了题目的数组打乱。

不能直接 random 。
语言是 JavaScript 。
4351 次点击
所在节点    问与答
10 条回复
loading
2015-12-22 16:06:26 +08:00
loading
2015-12-22 16:21:22 +08:00
还是没达到我的要求。

我希望是有一个因子,数组的顺序是按这个因子进行排序的,只要因子相同,排序就相同,这个因子是一个方便输入的东西,一个简单的字符串,而不是一个 map 。
PublicID
2015-12-22 16:26:49 +08:00
将字符串 hash 获取随机数种子,再以此产生随机数为依据打乱
loading
2015-12-22 16:28:53 +08:00
@PublicID
似乎是个办法,短数据超长还要恒定,似乎 hash 是个好办法,我试一下!
谢谢。
bitsmix
2015-12-22 16:52:03 +08:00
`npm install random-seed`
BOYPT
2015-12-22 16:59:32 +08:00
loading
2015-12-22 17:08:02 +08:00
@BOYPT 英语还是太差了…谢谢
chend
2015-12-22 18:02:24 +08:00
给你个思路:
1 : 整体移位
questions = [xxx];
offset = parseInt(input);
然后,每个题目 都按照 (index + offset ) % questions.length 移位。
抽取题目的时候,再根据输入的题号取题目。。。
当然, 这种整体移位 有规律, 容易被发现。。。
2 : random
questions = [ {index:1, title:'zzzzz'}, ... ] // 数组元素 为{ index , title} 格式, index 为本来的题号
random(0 , length)
//随机一个数,结果存到另外一个 randomQuestions 中, 长度 length-1 , questions 用.splice()删除, 继续
//random()
randomQuestions = {};
randomQuestions[questions[index]] = questions[title];
取值 直接 randomQuestions[i]
saberlion
2015-12-22 20:52:44 +08:00
洗牌算法
loading
2015-12-22 21:32:52 +08:00
@chend 这个我早就写好啦~但是都是随机的。 6 楼的比较复合。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/245390

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX