从对象中挑选一些随机属性
Picking a few random properties from an Object
如果我有如下几个对象:
var points = {'p1':{x:1,y:1,z:2}, 'p2':{x:2,y:1,z:4},.....,'p10':{x:3,y:2:z:2}};
var lines = {'l1':{....},'l2':{....},......,'l10'{....}};
var jsonObject = {'info': 'information', 'points': points, 'lines': lines};
如何从各个对象中选取(例如,3 个随机点和 3 个随机线)并在 jsonObject
中进行更新,以便新的 jsonObject
现在包含 {'info': 'information', 'points': pointObj, 'lines': lineObj};
,其中 pointObj
包含来自原始 points
对象的 3 个随机点,并且 lineObj
包含来自原始 lines
对象的 3 个随机线?
使用 random()
函数。
var randomNum = Math.floor((Math.random() * 10));
现在根据 randomNum 使用它的索引选择一个条目。
var jsonObject = {
"points" : [],
"lines" : []
};
var count = 0;
while(count <3)
{
var randomNum = Math.floor((Math.random() * 10))
jsonObject["points"].push(points[randomNum][0]);
randomNum = Math.floor((Math.random() * 10));
jsonObject["lines"].push(lines[randomNum][0]);
count++;
}
作为带键的对象,您可以使用Object.keys将其所有键作为数组获取:
var getRandoms = function(source, number) {
var keys = Object.keys(source) // get all keys as array
,len = keys.length; // keys count
var result = {};
// not enough points, so just return all object from source.
if (len < number) {
return source;
}
var rand, key, count = 0;
while (count < number) {
rand = Math.floor(Math.random() * len);
key = keys[rand];
result[key] = source[key];
// Remove used key
keys.splice(rand, 1);
--len;
++count;
}
return result;
}
jsonObject.points = getRandoms(points, 3);
jsonObject.lines = getRandoms(lines, 3);
创建一个 return 随机选择 [0-10) 之间的数字的函数
function get3RandomPoint(){
var temp, arr=[];
while(arr.length < 3) {
temp = Math.ceil(Math.random()*10);
if(arr.indexOf(temp) === -1) {
arr.push(temp);
}
}
return arr;
}
var points = {'p1':{x:1,y:1,z:2}, 'p2':{x:2,y:1,z:4},.....,'p10':{x:3,y:2:z:2}};
var lines = {'l1':{....},'l2':{....},......,'l10'{....}};
var randomNums = get3RandomPoint();
var randomPoints = {p1: points["p"+ randomNums[0]], p2: points["p"+ randomNums[1]], p2: points["p"+ randomNums[2]]};
randomNums = get3RandomPoint();
var randomLiness = {l1: points["l"+ randomNums[0]], l2: points["l"+ randomNums[1]], l2: points["l"+ randomNums[2]]};
var jsonObject = {'info': 'information', 'points': randomPoints, 'lines': randomLiness};
console.log(jsonObject);
如果我有如下几个对象:
var points = {'p1':{x:1,y:1,z:2}, 'p2':{x:2,y:1,z:4},.....,'p10':{x:3,y:2:z:2}};
var lines = {'l1':{....},'l2':{....},......,'l10'{....}};
var jsonObject = {'info': 'information', 'points': points, 'lines': lines};
如何从各个对象中选取(例如,3 个随机点和 3 个随机线)并在 jsonObject
中进行更新,以便新的 jsonObject
现在包含 {'info': 'information', 'points': pointObj, 'lines': lineObj};
,其中 pointObj
包含来自原始 points
对象的 3 个随机点,并且 lineObj
包含来自原始 lines
对象的 3 个随机线?
使用 random()
函数。
var randomNum = Math.floor((Math.random() * 10));
现在根据 randomNum 使用它的索引选择一个条目。
var jsonObject = {
"points" : [],
"lines" : []
};
var count = 0;
while(count <3)
{
var randomNum = Math.floor((Math.random() * 10))
jsonObject["points"].push(points[randomNum][0]);
randomNum = Math.floor((Math.random() * 10));
jsonObject["lines"].push(lines[randomNum][0]);
count++;
}
作为带键的对象,您可以使用Object.keys将其所有键作为数组获取:
var getRandoms = function(source, number) {
var keys = Object.keys(source) // get all keys as array
,len = keys.length; // keys count
var result = {};
// not enough points, so just return all object from source.
if (len < number) {
return source;
}
var rand, key, count = 0;
while (count < number) {
rand = Math.floor(Math.random() * len);
key = keys[rand];
result[key] = source[key];
// Remove used key
keys.splice(rand, 1);
--len;
++count;
}
return result;
}
jsonObject.points = getRandoms(points, 3);
jsonObject.lines = getRandoms(lines, 3);
创建一个 return 随机选择 [0-10) 之间的数字的函数
function get3RandomPoint(){
var temp, arr=[];
while(arr.length < 3) {
temp = Math.ceil(Math.random()*10);
if(arr.indexOf(temp) === -1) {
arr.push(temp);
}
}
return arr;
}
var points = {'p1':{x:1,y:1,z:2}, 'p2':{x:2,y:1,z:4},.....,'p10':{x:3,y:2:z:2}};
var lines = {'l1':{....},'l2':{....},......,'l10'{....}};
var randomNums = get3RandomPoint();
var randomPoints = {p1: points["p"+ randomNums[0]], p2: points["p"+ randomNums[1]], p2: points["p"+ randomNums[2]]};
randomNums = get3RandomPoint();
var randomLiness = {l1: points["l"+ randomNums[0]], l2: points["l"+ randomNums[1]], l2: points["l"+ randomNums[2]]};
var jsonObject = {'info': 'information', 'points': randomPoints, 'lines': randomLiness};
console.log(jsonObject);