Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/441.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_Node.js - Fatal编程技术网

Javascript 基于值带填充数组

Javascript 基于值带填充数组,javascript,node.js,Javascript,Node.js,我需要根据一个人的“年龄”创建一个数据数组。该条带不是线性的,而是像这样分组的 1,2,3,4,5,6,7,8,9,10,11-15,16-20,21-30,31-50,51+ 因此,对于任何一组数据,我都需要遍历这些数据,并将此人放入适当的年龄“桶”中 在循环的最后,我想看看每个乐队有多少人 现在,我已经通过使用非常粗糙的技术(又名if this..then..else if..);)完成了这项工作,但是我想知道我是否可以学习新技术,是否有任何库或函数可以占据一个范围并相应地填满这个桶一个非常

我需要根据一个人的“年龄”创建一个数据数组。该条带不是线性的,而是像这样分组的

1,2,3,4,5,6,7,8,9,10,11-15,16-20,21-30,31-50,51+

因此,对于任何一组数据,我都需要遍历这些数据,并将此人放入适当的年龄“桶”中

在循环的最后,我想看看每个乐队有多少人

现在,我已经通过使用非常粗糙的技术(又名if this..then..else if..);)完成了这项工作,但是我想知道我是否可以学习新技术,是否有任何库或函数可以占据一个范围并相应地填满这个桶

一个非常粗糙的o(n^2)实现

const bucket=[
{
洛厄利姆:1,
上限:1,
人数:0
},
{
洛厄利姆:2,
上限:2,
人数:0
},
{
洛厄利姆:3,
上限:5,
人数:0
},
{
洛厄利姆:6,
上限:10,
人数:0
},
{
洛厄利姆:11,
人数:0
}
];
const persons=[{name:'john',age:1},{name:'john',age:2},{name:'john',age:6},{name:'john',age:20},{name:'john',age:40},{name:'john',age:7},{name:'john age:1}];
persons.forEach(person=>{
bucket.forEach(bucket=>{
const age=person.age;
const bucketLowerLimit=bucket.lowerLim;
常量bucketUpperLimit=bucket.upperLim | | Number.MAX_SAFE_整数;
如果(年龄>=bucketLowerLimit&&age{
控制台日志(bucket.persons);

});
您可以对中间的所有值使用一个引用,并使用一个单独的最后一个值

var slots='1,2,3,4,5,6,7,8,9,10,11-15,16-20,21-30,31-50,51+'。拆分(','),
last=slots.pop(),
reference=Object.create(null),
直方图=对象。创建(空),
i、 价值观;
slots.forEach(功能(a){
var temp=a.split('-'),
左=温度[0],
右=温度[1]| |温度[0];
直方图[a]=0;
参考[权利]=a;
while(左<右){
参考[左]=a;
左++;
}
});
直方图[最后]=0;
对于(i=0;i<1000000;i++){
值=Math.floor(Math.random()*100);
直方图[参考[值]| |最后一次]++;
}
控制台日志(直方图);
console.log(参考);

.as控制台包装{max height:100%!important;top:0;}
这就是我要做的:

let buckets = '1,2,3,4,5,6,7,8,9,10,11-15,16-20,21-30,31-50,51+'.split(','),
    bucketByAge = {}; // our bucket-age connector where we search later on

// prepare the index
buckets.forEach(function(bucket, index) {
  // get the range (+ will be replaced with 1000; for the age it is infinity)
  // and transform them to numbers
  let range = bucket.replace('+', '-1000').split('-').map(Number);

  // if it was not a range, simulate one
  range[1] = range[1] || range[0];

  // go through the range and fill our connector
  while (range[0] <= range[1]--) {
    bucketByAge[range[1]] = index;
  }
});

// search
function getBucket(age) {
  return { age: age, bucketRange: buckets[bucketByAge[age]], bucketIndex: bucketByAge[age] };
}

console.log(getBucket(1));
console.log(getBucket(12));
console.log(getBucket(61));
let bucket='1,2,3,4,5,6,7,8,9,10,11-15,16-20,21-30,31-50,51+'。拆分(','),
bucketByAge={};//我们的bucket age连接器,稍后在这里搜索
//准备索引
bucket.forEach(函数(bucket,index){
//获取范围(+将替换为1000;对于年龄,它是无限的)
//并将它们转换为数字
让range=bucket.replace(“+”,“-1000”).split(“-”).map(编号);
//如果它不是一个范围,请模拟一个范围
范围[1]=范围[1]| |范围[0];
//检查范围并填充我们的接头

while(range[0]你有一些测试数据吗?我有,但它可以被认为只是一组随机的数字/年龄..让人们=[{name:“john”,年龄:29}…{name:“fred”,年龄:99}]它必须是一个简单的数组吗?一个对象数组可以更好地保存这些数据……出于我的目的,是的。但是,对一个更通用的解决方案非常开放。在上面的示例数据中,我希望bucket[12]为1,bucket[14]为1