不使用if-else返回基于整数的图像名称

时间:2019-08-23 16:01:46

标签: javascript

如何返回基于整数的图像名称?我有一个主意,但是它使用了ifelse案例的负载。

这就是问题,我需要一个函数,该函数将基于1到500之间的整数返回图像的名称。如果整数在1到30之间,则显示image1,从这一点开始,我返回一个不同的值图片分别为50、75、100、125、150、175、200等。

想到的第一个想法是使用IF和Elses这样的:

if (number >=1 && number <= 29) {
    Return image1
} else if (number >=30 && number <=49) {
    Return image2
} else if... etc

但是此功能将变得非常庞大,因为我将拥有大约20个If Else,以便覆盖所有可能的结果,直到500号为止。

另一种选择是使用键:值对创建JSON对象,并使用整数键获取图像,如下所示:

returnImage(int) {
    let images = {
        30: 'image1',
        50: 'image2',
        75: 'image3'
    }

    return images[int]
}

例如,如果整数是37,我不确定如何使此工作有效。我显然可以列出所有整数作为键,但是该函数将比if else函数更大,并且还会有很多重复,因此似乎不起作用。

有什么建议吗?

3 个答案:

答案 0 :(得分:7)

您可以为此使用数学计算:

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
excel_file = 'C:/Users/afrydman/Documents/Storage and Data Centers FFO Multiples Data.xlsx'
dfStorage = pd.read_excel(excel_file,sheet_name='Storage Data', index_col='Date')
dfrollingStd = dfStorage.rolling(12).std().shift(-11)
#dfrollingStd.fillna(0)
#print(dfStorage[1][3])
for i in dfStorage:
    dftemp = pd.DataFrame(dfStorage,columns=[i])
    for j in dfrollingStd:
        dfnew=pd.DataFrame(dfrollingStd,columns=[j])
        dftemp['-1std'] = pd.DataFrame(dftemp).subtract(dfnew)
        dftemp['+1std'] = pd.DataFrame(dftemp).add(dfnew)
    pd.DataFrame(dftemp).plot()
    plt.ylabel('P/FFO')

答案 1 :(得分:2)

只需遍历images中的键即可。

 returnImage(num){
     let images= {
         30: 'image1',
         50: 'image2',
         75: 'image3'
     }
    for(let image in images){
     if(num <= image) return images[image];
    }
 }

编辑:如果数字超过了最大值,我会在循环后添加一些默认图像。

答案 2 :(得分:2)

您需要的是一个范围。

const IMAGE_FOR_NUMBER = [
  [0, 9, "one.jpg"],
  [10, 19, "ten.jpg"],
  [20, 100, "many.jpg"],
];

function getImage(n, notFound="not-found.jpg") {
  for (const [min, max, image_name] of IMAGE_FOR_NUMBER) {
   if ((min <= n) && (n <= max)) return image_name; 
  }
  return notFound;
}

请注意,它也适用于不相交的范围