【发布时间】:2011-05-22 20:41:43
【问题描述】:
我有一个这样的数据字典:
var data = {
'text1': 1,
'text2': 2,
'text3': 3,
...
'text20': 20
];
我需要随机选择这些键,然后随机播放它的值。在示例中,它应该这样写:
> console.log(choose(data, 5));
[ { key: 'text15', value: 8 },
{ key: 'text6', value: 3 },
{ key: 'text3', value: 15 },
{ key: 'text19', value: 6 },
{ key: 'text8', value: 19 } ]
现在我将键提取到另一个数组中并按 Math.random() 排序,但我坚持交换值,因为没有键应该具有与最初相同的值。
您将如何在这里交换键/值?
谢谢
【问题讨论】:
-
是否有更换?例如'text8' 的值可以出现两次吗?
-
不,不能有重复值。
-
“任何键都不应该具有与最初相同的值”是什么意思?同样按关键函数
Math.random()排序不会给你一个等概率的排列;这取决于使用的排序算法。您必须通过Math.random()获取 N 个密钥,存储这些密钥,然后按它们排序。 -
因为我试图将第一个与最后一个的值交换,第二个与最后一个交换,但当然这会使中间的值具有相同的值。
-
好吧,如果您不需要随机化,只需洗牌,将每个值向任一方向移动一步,然后取消移动/推送
标签: javascript random swap shuffle