Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/463.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
创建具有唯一值的部分随机对象(Javascript)_Javascript - Fatal编程技术网

创建具有唯一值的部分随机对象(Javascript)

创建具有唯一值的部分随机对象(Javascript),javascript,Javascript,我想从两个数组中构建一个对象,该对象对于第一个数组的每个不同值都应该有一个唯一的键名,并且从第二个数组中随机选择一个也是唯一的值 var keyNames = ['a','b','a','c','a'] var valuesToPickFrom = ['foo', 'bar', 'baz', 'qux', 'quux', 'waldo', 'fred'] 也就是说,预期的最终结果是: { 'a':'foo', 'b':bar', 'c':'baz' } // each value is uni

我想从两个数组中构建一个对象,该对象对于第一个数组的每个不同值都应该有一个唯一的键名,并且从第二个数组中随机选择一个也是唯一的值

var keyNames = ['a','b','a','c','a']
var valuesToPickFrom = ['foo', 'bar', 'baz', 'qux', 'quux', 'waldo', 'fred']
也就是说,预期的最终结果是:

{ 'a':'foo', 'b':bar', 'c':'baz' } // each value is unique
但不是:

{ 'a':'foo', 'b':bar', 'c':'bar' } // repeated value, no good

如何做到这一点?这个问题太模糊了。因此,我将仅描述您的函数应该做什么:

  • 消除两个阵列中的重复项
  • 随机化两个数组
  • 启动一个结果对象<代码>变量结果={}
  • 一个while循环,直到没有更多的键或值
  • array.pop数组中的键和值。将其添加到对象中<代码>结果[键]=值
  • 返回结果对象
    所以我想要一个函数
    你自己有没有尝试过?如果您遇到wallStackOverflow不是“解决方案”的站点,请发布您正在尝试的代码(特别是如果您所说的“解决方案”是指“代码准备好复制/粘贴”)。它也不是用来“思考”的。我相信他自己也试过,这就是为什么他在这里问这个问题。我觉得这是一个“有趣的”问题,当这是一个糟糕的问题时,这个问题总是受到反对票的欢迎。@melpomene来自您链接的页面:“如果您的问题通常涉及……特定的编程问题、软件算法或程序员常用的软件工具;这是一个实用的、可回答的问题,是软件开发所特有的……那么你就在正确的地方提出你的问题了!“我的问题符合所有这些标准。我删除了同位语。我……这就是我刚才做的。我很困惑……你问的不是一个“一般情况”,而是一个相当具体的问题。但这不是重点,因为你问题的主题不是问题。问题是你的问题(”我该怎么做?”)有效地要求人们为您编写代码。这是一个不具体的问题,而不是主题。不要使用
    排序
    来洗牌数组。这样做不起作用。我知道,这是一种幼稚的方法,我不会编写完整的解决方案。我将从答案中删除该示例。有很多方法可以做到这一点。旧方法应该如下所示:
    函数shuffle(o){for(var j,x,i=o.length;i;j=parseInt(Math.random()*i),x=o[--i],o[i]=o[j],o[j]=x);返回o;}
    。如果你想变得有趣,你甚至可以应用加密随机化。
    parseInt
    对一个数字进行分析?这仍然是疯狂的谈话。是的,需要有人做完整的家庭作业。这是一个旧代码。它需要得到一个整数。它可以使用
    Math.floor()
    取而代之。就我个人而言,我不会在生产中使用它,这足以证明概念。我会使用使用
    crypto.getRandomValues()
    的东西。