使用json文件中的信息优化node.js应用程序[已关闭]

llycmphe  于 2023-05-17  发布在  Node.js
关注(0)|答案(2)|浏览(151)

已关闭,此问题需要更focused。目前不接受答复。
**想改善这个问题吗?**更新问题,使其仅通过editing this post关注一个问题。

3天前关闭。
Improve this question
在我的应用程序中,我想根据给定的值显示各种化学元素的状态。有一个JSON文件,其中包含有关元素的所有信息

{
 "1":{
   "Symbol":"H",
   "MeltingPoint": 13.81,
   "BoilingPoint": 20.28,
    ...
  }
}

例如,将有一个输入字段,用户可以在其中输入所需的温度,然后将得到元素的显示,并按其实际状态进行着色。为此,我需要循环遍历JSON文件,然后将值与输入的值进行比较。在比较之后,该值将被设置到阵列中的对应位置并被发送到电子显示单元。对于温度以外的其他属性(例如JSON文件是不可更改的,因为它是在外部生成的。
目前,我实现了这个函数:

const assumedInputTemperature = 20.0;
const display = new Array(119);
const color_solid = 1;
const color_liquid = 2;
const color_gas = 3;
const color_undefinded = 4;

    for (const key in elements){

    const value = elements[key];
    const meltingPoint = value.MeltingPoint;
    const boilingPoint = value.BoilingPoint1;
    const number = parseInt(key)

    console.log(`${number}: ${meltingPoint} : ${boilingPoint}`)

    if(meltingPoint == "" && boilingPoint == ""){
        console.log("Unknown!!?")
        display[number] = color_undefinded;
    } else {
        if (meltingPoint > assumedInputTemperature) {
            display[number] = color_solid;
        } else if (meltingPoint < assumedInputTemperature && boilingPoint > assumedInputTemperature) {
            display[number] = color_liquid;
        } else if (meltingPoint < assumedInputTemperature && boilingPoint < assumedInputTemperature) {
            display[number] = color_gas;
        } else {
            console.log("ERROR!");
        }
    }
    console.log(display[number]);
    }

这是功能性的,但我想知道是否有更好的方法来做到这一点。是否有更好的执行建议?

envsm3lx

envsm3lx1#

不知道你到底想通过做得更好来实现。你的代码是可读的,容易理解,这是足够好的。但这里有一个例子,我将如何做到这一点:

const display = [];
const color_solid = 1;
const color_liquid = 2;
const color_gas = 3;
const color_undefinded = 4;

const assumedInputTemperature = 20.0;

const getColor = (meltingPoint, boilingPoint) => {
    if(isNaN(meltingPoint)){
        // meltingPoint is not number but needed for first check
        // or you should combine it with upper IF check. It is unclear to me
        console.log("Unknown!!?")
        return color_undefinded
    }

    if(meltingPoint > assumedInputTemperature) return  color_solid

    if(isNaN(boilingPoint)) {
        // boilingPoint is not a number but needed for second check
        console.log("Unknown!!?")
        return color_undefinded
    }

    // here we already know meltingPoint <= assumedInputTemperature noo need to check
    if(boilingPoint > assumedInputTemperature) return color_liquid
    // here we know boilingPoint <= assumedInputTemperature

    return color_gas
}

for (const key in elements){

    const value = elements[key];
    const meltingPoint = value.MeltingPoint;
    const boilingPoint = value.BoilingPoint1;
    const number = parseInt(key)

    console.log(`${number}: ${meltingPoint} : ${boilingPoint}`)

    display[number] = getColor(meltingPoint, boilingPoint)

    console.log(display[number]);
}
dsekswqp

dsekswqp2#

您可以使用Map data structures,其中一个温度值作为键,然后按键查找项目。
我的建议福尔斯“花设置时间和内存组织数据结构以快速访问”的标题。
但是你可以假设在你的代码的生命周期中,周期表中只有不到150个元素(现在已知的元素有118个)。所以你现在的每一项搜索都是完全足够的。为了更快地搜索特定的数据集而增加复杂性或测试时间是不值得的。
但是,如果你的应用程序是为了搜索,我不知道,许多有机合成前体化合物,你有什么是不够的。如果数据集向上扩展,则应考虑使用数据库。许多科学应用程序使用简单且免费的SQLite数据库。

相关问题