gpt4 book ai didi

javascript - 如何有效地从给定列表构建随机列表而不在 JS 中重复出现?

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

我有一个逗号分隔的字符串,我需要从中创建一个新字符串,其中包含原始字符串中项目的随机顺序,同时确保没有重复出现。例如:运行 1,2,3,1,3 将得到 2,3,1,另一次将得到 3,1,2,依此类推。

我有一个代码,它在原始字符串中随机选择一个项目,然后遍历新字符串以查看它是否不存在。如果它不存在 - 插入该项目。但是,我觉得这可以改进(在 C# 中我会使用哈希表,而不是每次都在新数组上迭代)。例如,一项改进是删除我们从原始数组中插入的项目,以防止出现随机数给我们相同结果的情况。

如果您能对下面的代码提出改进建议,我将非常高兴。

originalArray = originalList.split(',');            
for (var j = 0; j < originalArray.length; j++) {
var iPlaceInOriginalArray = Math.round(Math.random() * (originalArray.length - 1));
var bAlreadyExists = false;
for (var i = 0; i < newArray.length; i++) {
if (newArray[i].toString() == originalArray[iPlaceInOriginalArray].toString()) {
bAlreadyExists = true;
break;
}
}

if (!bAlreadyExists)
newArray.push(originalArray[iPlaceInOriginalArray]);
}

谢谢!

最佳答案

您仍然可以在 javascript 中使用“哈希”来删除重复项。只有在 JS 中它们才被称为对象:

function removeDuplicates(arr) {
var hash = {};
for (var i=0,l=arr.length;i<l;i++) {
hash[arr[i]] = 1;
}
// now extract hash keys... ahem...
// I mean object members:
arr = [];
for (var n in hash) {
arr.push(n);
}
return arr;
}

哦,还有从数组中随机选择的东西。如果可以销毁原始数组(在您的情况下是这样),则使用拼接:

function randInt (n) {return Math.floor(Math.random()*n)}

function shuffle (arr) {
var out = [];
while (arr.length) {
out.push(
arr.splice(
randInt(arr.length),1 ));
}
return out;
}

// So:
newArray = shuffle(
removeDuplicates(
string.split(',') ));

关于javascript - 如何有效地从给定列表构建随机列表而不在 JS 中重复出现?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2004870/

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