Javascript 按001到999的顺序生成数字,而不在数据中放置相同的数字

Javascript 按001到999的顺序生成数字,而不在数据中放置相同的数字,javascript,Javascript,我试图创建一个生成数字的系统,它在其中创建一个从001到999的数字,以便在json文件中不存在该数字,例如json文件将包含如下数据 { "001": { “此处有一些数据”:“idk” } } 当它在json文件中已经存在时,它不添加另一个001,但从001到999,我尝试使用Math.random()生成数字,但不知道如何创建系统,它不添加另一个相同的数字这样的循环是一个可能的解决方案 函数createNumbers(){//Numbers 001-999.顺序 设数字=[], x=0

我试图创建一个生成数字的系统,它在其中创建一个从001到999的数字,以便在json文件中不存在该数字,例如json文件将包含如下数据

{
"001": {
“此处有一些数据”:“idk”
}
}

当它在json文件中已经存在时,它不添加另一个001,但从001到999,我尝试使用
Math.random()
生成数字,但不知道如何创建系统,它不添加另一个相同的数字这样的循环是一个可能的解决方案

函数createNumbers(){//Numbers 001-999.顺序
设数字=[],
x=0,
y=0,
z=0,
我
对于(i=0;i<999;i++){
z++;
如果(z>9){
y++;
z=0;
}
如果(y>9){
x++;
y=0;
}
x=x.toString();
数字。推送(“”+x+y+z+“”);
}
返回号码;
}
document.write(createNumbers())
正文{
字体系列:Arial;
颜色:#999;
}
div{
显示:内联块;
保证金:0.25雷姆;
边界半径:0.5雷姆;
填充:0.25rem;
背景色:#ccc;
颜色:#444;

}
生成从1到999 a的数字将完成此任务

function getRandomInt() {
  return Math.floor(Math.random() * 999);
}

const generatedNumber = getRandomInt(); // 32
由于您希望数字具有3个固定字符并为字符串,因此可以使用例如

const generatedString = `${generatedNumber}`.padStart(3, '0'); // 032
然后,您只需要遍历JSON数据并检查该键是否存在

const JSON = {
  "001": {
    "some data here": "idk"  
  }
};

const allKeys = Object.keys(JSON); // ["001"]
const hasKey = allKeys.find(x => x === generatedString) !== undefined
有了这些信息,做你想做的事情就容易多了

let data = {
    "001": {
       "some data here": "idk"  
    }
}

let randUniqueKeyGenerator = (data)=>{
    keys = Object.keys(data);
    found = false;  
    let key;    
    if(keys.includes('100')) return "";
    while(!found){
        key = Math.floor(Math.random()*101).toString()
        key = ('00' + key).slice(-3)
        found = !(keys.includes(key)) 
        // to make key greater than existing keys, uncomment next line
        //if(found) found = !(keys.some(k=>parseInt(k)>parseInt(key)))
  
    }
    return key
}

console.log(randUniqueKeyGenerator(data))

其中,数据是您需要为其生成唯一键的对象。

您可能可以使用一个简单的while循环,将解析的JSON的
对象.keys
与当前迭代索引进行比较,如果它不在keys数组中,则将其包括在内

例如:

const json='{“001”:{“此处某些数据”:“idk”},003:{“此处某些数据”:“idk”},005:{“此处某些数据”:“idk”};
constkeys=Object.keys(JSON.parse(JSON)).map(el=>parseInt(el));
常量nums=[];
设i=1;
而(i<999){
如果(!键包括(i)){
push(`${i}`.padStart(3,'0');
}
i++;
}

log(nums)
好吧,如果你想按顺序生成一个从001到999的数字,我想一个循环会很好,可能类似于
for(let I=1;I<1000;I++){
?然后你想用
let p=('000'+I).slice(-3)生成一个零填充字符串
。然后检查文件是否有它,假设您执行了类似于
let data=JSON.parse(dataFromFile);
,如果(!data[p]){/*不存在*/data[p]={“添加一些属性”:“here”},您可以轻松地执行
,或者你想做的任何事情。谢谢!我所需要的就是,数字可以从001到099Yes升序。只需将此作为while循环的最后一行添加
if(found)found=!(keys.find(k=>parseInt(k)>parseInt(key))
编辑代码以处理错误情况