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不客气!如果你被输入,我会添加注释!