Google Earth Engine中循环为变量赋值问题求助
解决Google Earth Engine中变量赋值的问题
我明白你遇到的困扰了——你尝试给Y03到Y18这些变量赋予对应年份值,但调用print(Y05)时得到undefined,这是因为你的循环写法没正确修改目标变量,而且对数组索引的使用也存在问题。
问题根源分析
- 变量与数组的关系误解:你定义的Y03-Y18是独立的全局变量,如果你的
Years数组是通过var Years = [Y03, Y04, ..., Y18]初始化的,那么数组里存储的只是这些变量的初始值(也就是undefined)。之后你执行Years[i] = i,只是修改了数组元素的数值,并没有改变Y03-Y18这些变量本身。 - 数组索引错误:循环里的
i是2003到2018的年份值,但数组的索引应该是从0开始的连续整数(0到15,共16个元素),直接用年份作为索引会导致Years[2003]超出数组范围,根本不会修改到你期望的位置。
解决方法
下面提供两种可行的方案,你可以根据需求选择:
方案一:直接给Y03-Y18变量赋值
通过动态构造变量名,直接修改全局作用域中的目标变量:
// 先声明所有需要的年份变量(可选,但能让代码更清晰) var Y03, Y04, Y05, Y06, Y07, Y08, Y09, Y10, Y11, Y12, Y13, Y14, Y15, Y16, Y17, Y18; var Years = []; for (var i = 2003; i <= 2018; i++) { // 构造变量名:比如2003→"Y03",2010→"Y10" var varName = "Y" + (i < 2010 ? "0" + (i - 2000) : (i - 2000)); // 给全局变量赋值 this[varName] = i; // 将年份值存入Years数组(如果需要的话) Years.push(i); } print(Y05); // 现在会输出2005
方案二:使用对象存储年份变量(更推荐)
如果不需要单独的全局变量,用对象来管理年份键值对会更整洁,避免污染全局作用域:
var yearVariables = {}; var Years = []; for (var i = 2003; i <= 2018; i++) { var key = "Y" + (i < 2010 ? "0" + (i - 2000) : (i - 2000)); yearVariables[key] = i; Years.push(i); } print(yearVariables.Y05); // 输出2005
验证效果
运行上述任意一种方案后,调用print(Y05)(方案一)或print(yearVariables.Y05)(方案二),都能得到你期望的2005值。
内容的提问来源于stack exchange,提问作者Pedro Rincon
相关产品推荐
相关产品推荐

