javascript if else语句给出错误的结果

时间:2020-09-10 15:48:01

标签: javascript leaflet

我使用leaflet制作地图,对于地图颜色,我使用的是动态概念,其中颜色是基于输入数据的,但是对于地图颜色的某些部分却得到了错误的结果,这就是JavaScript代表颜色:

data_increase = [5]
data_decrease = [14]
data_equal = [29]
//data is based from input

function color_region_a(fillColor) {
  if (data_increase < data_decrease && data_decrease > data_equal)
    return 'green';
  else if (data_increase < data_decrease && data_decrease < data_equal)
    return '#7FFF00'; //color between green and yellow (Chartreuse)
  else if (data_equal > data_increase && data_equal > data_decrease)
    return 'yellow';
  else if (data_equal > data_increase && data_increase > data_decrease)
    return 'orange';
  else(data_increase > data_decrease && data_increase > data_equal)
  return 'red';
};

这是地图部分,但我认为这里没有错:

var region_a = L.geoJson(RegionA, {
        "color":"white",
        fillColor: color_region_a(),
        opacity: 10,
    }).addTo(map)

问题是,fillColor结果总是返回red,结果应该是#7FFF00又名chartreuse,我在哪里做错了?还是有其他方法可以实现我的期望?预先感谢

2 个答案:

答案 0 :(得分:3)

它们是数组,您无法按原样进行比较。

您需要使它们成为原始数字(不在数组中),或者像这样进行比较:

import {useEffect} from 'react'; import { useLocation } from 'react-router-dom' export const useIntro = () => { const location = useLocation() const urlPath = location.pathname const storage = window.localStorage; const currTimestamp = Date.now(); const timestamp = JSON.parse(storage.getItem(`timestamp${urlPath}`) || '1000'); const timeLimit = 3 * 60 * 60 * 1000; // 3 hours const hasTimePassed = currTimestamp - timestamp > timeLimit; useEffect(() => { hasTimePassed ? storage.setItem(`timestamp${urlPath}`, currTimestamp.toString()) : storage.setItem(`timestamp${urlPath}`, timestamp.toString()); }, []); return hasTimePassed; }; export default useIntro;

答案 1 :(得分:2)

您犯了2个错误。

  1. 您正在比较[5] > [29],这是不正确的。您应该以这种方式5 > 29比较data_increase[0] < data_decrease[0]
  2. 如果在最后一个else语句中,您忘记添加。

请参阅下面的演示。

data_increase = [5]
data_decrease = [14]
data_equal = [10]
//data is based from input

function color_region_a(fillColor) {
  if (data_increase[0] < data_decrease[0] && data_decrease[0] > data_equal[0])
    return 'green';
  else if (data_increase[0] < data_decrease[0] && data_decrease < data_equal[0])
    return '#7FFF00'; //color between green and yellow (Chartreuse)
  else if (data_equal[0] > data_increase[0] && data_equal[0] > data_decrease[0])
    return 'yellow';
  else if (data_equal[0] > data_increase[0] && data_increase[0] > data_decrease[0])
    return 'orange';
  else if(data_increase[0] > data_decrease[0] && data_increase[0] > data_equal[0])
  return 'red';
};

console.log(color_region_a());