gpt4 book ai didi

javascript - 在 JavaScript 中打乱数组属性

转载 作者:行者123 更新时间:2023-11-30 18:43:44 28 4
gpt4 key购买 nike

我有一个这样的数据字典:

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() 排序,但我坚持交换值,因为没有键应该具有与最初相同的值。

您将如何在此处交换键/值?

谢谢

最佳答案

我使用 underscore.js 整理了一个可能的解决方案以跨浏览器的方式简化遍历对象和数组:

var data = {
text1: 1,
text2: 2,
text3: 3,
text4: 4,
text5: 5,
text6: 6,
text7: 7,
text8: 8,
text9: 9,
text10: 10
};

function choose(data, num)
{
var keys = _.sortBy(
_.keys(data),
function(k)
{
return (Math.random() * 3) - 1;
}
),
results = [],
k1, k2;
if (num > keys.length) {
throw new Error('Impossible to retrieve more values than exist');
}
while (results.length < num) {
k1 = k2 || keys.pop();
k2 = keys.pop();
results.push({key:k1, value: data[k2]});
}
return results;
}

console.log(choose(data, 5));

这不一定是最佳方法,但它似乎可以满足您的要求。我首先捕获所有的 key 并随机排序。然后,我循环遍历随机键,使用一个键和以下键值创建一个新对象。这样,您将始终得到与每个键关联的不同值。如果您需要它在传递给函数的 num 值 == 数据中的键数时工作,那么您将不得不添加更多代码——我将把它留给读者练习 :)

您可以在 jsfiddle 上玩一下这段代码:

http://jsfiddle.net/zVyQW/1/

关于javascript - 在 JavaScript 中打乱数组属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6090656/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com