Javascript 从嵌套对象中随机获取10个不';不要重复

Javascript 从嵌套对象中随机获取10个不';不要重复,javascript,Javascript,所以,我有一个这样的“数据库”: var db = { cars: [ {brand: 'x', color: 'blue'}, {brand: 'y', color: 'red'} ], pcs: { allInOne: [ {brand: 'z', ram: '4gb'}, {brand: 'v', ram: '8gb'} ], desktop: [ {brand: 'a', ram: '16gb'},

所以,我有一个这样的“数据库”:

var db = {
  cars: [
    {brand: 'x', color: 'blue'},
    {brand: 'y', color: 'red'}
  ],
  pcs: {
    allInOne: [
      {brand: 'z', ram: '4gb'},
      {brand: 'v', ram: '8gb'}
    ],
    desktop: [
      {brand: 'a', ram: '16gb'},
      {brand: 'b', ram: '2gb'}
    ]
  }
}
var random = [
  {categorie: 'cars', subcategorie: null, product: {...}},
  {categorie: 'cars', subcategorie: null, product: {...}},
  {categorie: 'pcs', subcategorie: 'desktop', product: {...}}
]
如您所见,可以有子类别。当然,我的“数据库”比这还要大。但概念是一样的。我需要从对象中获取3个随机项,并将它们与类别和子类别(如果存在)一起存储,如下所示:

var db = {
  cars: [
    {brand: 'x', color: 'blue'},
    {brand: 'y', color: 'red'}
  ],
  pcs: {
    allInOne: [
      {brand: 'z', ram: '4gb'},
      {brand: 'v', ram: '8gb'}
    ],
    desktop: [
      {brand: 'a', ram: '16gb'},
      {brand: 'b', ram: '2gb'}
    ]
  }
}
var random = [
  {categorie: 'cars', subcategorie: null, product: {...}},
  {categorie: 'cars', subcategorie: null, product: {...}},
  {categorie: 'pcs', subcategorie: 'desktop', product: {...}}
]
还有,我需要他们不要重复。我怎样才能做到这一点?提前谢谢

函数getRandom(db,num){ //首先:获取所有产品及其类别和子类别的数组 var arr=[];//数组 Object.keys(db).forEach(函数(k){//对于数据库中的每个键(类别) if(db[k]instanceof Array){//如果类别没有子类别(如果是数组) db[k].forEach(函数(p){//然后为每个产品p添加一个类别为k、sucategory null和产品p的条目 arr.push({categorie:k,subcategorie:null,product:p}); }); } else{//如果此目录有子类别 Object.keys(db[k]).forEach(函数(sk){//然后对于每个成功的 db[k][sk].forEach(函数(p){//添加具有类别k、子类别sk和产品p的产品 arr.push({类别:k,子类别:sk,乘积:p}); }) }); } }); //第二:从数组arr中获取num随机项 var-res=[]; while(arr.length&&num){//while数组中有产品且num尚未实现 var index=Math.floor(Math.random()*arr.length);//获取一个随机索引 res.push(arr.splice(index,1)[0]);//从arr中删除该项并将其推入res(splice返回一个数组,请参阅文档) num--; } 返回res; } var db={汽车:[{品牌:'x',颜色:'蓝色'},{品牌:'y',颜色:'红色'}],个人电脑:{allInOne:[{品牌:'z',内存:'4gb'},{品牌:'v',内存:'8gb'}],桌面:[{品牌:'a',内存:'16gb'},{品牌:'b',内存:'2gb'};
log(getRandom(db,3))您给出的示例似乎重复了“汽车”类别@rasmeister是的,分类可以重复,但不是产品我的建议是先创建一个完整的扁平阵列,然后很容易洗牌和拼接。产品是指“品牌”,等等?@hackerrdave使用while循环,例如,只要
random
数组中的产品数量少于
3
,我就会不断迭代对象,但代码很混乱,它不会把我带到任何地方:(你真是个天才!谢谢!@PeterZelak不客气!如果你被输入,我会添加注释!