为什么数组引用号转换为STRING
Why does the array reference number switch to a STRING?
我发现了我引用的问题,但我不明白现在发生了什么。数组正在正确填充,但我不知道为什么我不能拉值。然后经过一些尝试和错误,我发现在结束时,如果我关闭引号中的数组引用值,它将返回正确的值。为什么在使用整数创建引用时将其转换为字符串?
function initPPArray(year) {
var beginningOfYear = new Date('January 1, 2014');
var dayOffset = (beginningOfYear.getDay() + 6) % 7;
var beginningOfPP = new Date(beginningOfYear.getFullYear(), beginningOfYear.getMonth(), beginningOfYear.getDate() - dayOffset);
var payPeriodList = [];
payPeriodList[1] = {};
payPeriodList[1].start = beginningOfPP;
payPeriodList[1].end = new Date(beginningOfPP.getFullYear(), beginningOfPP.getMonth(), beginningOfPP.getDate() + 13);
Logger.log('beginningOfPP: ' + beginningOfPP);
var txtStart = getMonthString(payPeriodList[1].start) + ", " + payPeriodList[1].start.getDate();
var txtEnd = getMonthString(payPeriodList[1].end) + ", " + payPeriodList[1].end.getDate();
Logger.log("PP 1: " + txtStart + " - " + txtEnd);
for (var i = 2; i <= 26; i++) {
payPeriodList[i] = {};
payPeriodList[i].start = new Date(payPeriodList[i-1].end.getFullYear(), payPeriodList[i-1].end.getMonth(), payPeriodList[i-1].end.getDate() + 1);
payPeriodList[i].end = new Date(payPeriodList[i].start.getFullYear(), payPeriodList[i].start.getMonth(), payPeriodList[i].start.getDate() + 13);
var txtStart = getMonthString(payPeriodList[i].start) + ", " + payPeriodList[i].start.getDate();
var txtEnd = getMonthString(payPeriodList[i].end) + ", " + payPeriodList[i].end.getDate();
Logger.log("PP: " + i + ": " + txtStart + " - " + txtEnd);
}
// This returns the proper value.. when no quotes are used it returns
// the last date of the loop "Dec 15,2014"
Logger.log("Random Value: " + payPeriodList["6"].start)
return payPeriodList;
}
JavaScript中的数组以索引0
开始,而不是索引1
。所以这段代码:
var payPeriodList = new Array();
payPeriodList[1] = {
// ...
};
…将0th
条目留空,同时使数组的长度为2
(因为标准JavaScript数组本质上是稀疏的,因为它们根本不是真正的数组)。这样做之后,由于在后续代码中使用的是push
,因此永远不会填充第一个条目。
将1
更改为0
,或将push
用于第一个条目(就像您对后续条目一样)。
旁注:用数组文字创建数组几乎总是更好,而不是用new Array()
:
var payPeriodList = [];
我认为您的问题是payPeriodList数组中的每个项目都是对同一对象(payPeriodItem)的引用。通过赋值数组的每次迭代都改变payPeriodItem的开始值和结束值,而不是用新的开始值和结束值创建一个新对象。因此,要解决这个问题,您只需要更改for循环中的第一行,将一个新对象分配给payPeriodList[i]。
for (var i = 2; i <= 26; i++) {
payPeriodList[i] = {};
/*...*/
}
相关文章:
- 如何在MongoDB中将String转换为Array
- 如何在不在本地下载的情况下将url中提供的文件(pdf/doc)转换为json/string/base64格式
- 如何在Android中将Javascript返回值转换为String
- 使用JavaScript在Json中提取时,将数组的元素转换为String
- 是否存在将String转换为可执行的c++表达式的方法
- 如何在javascript中将String变量转换为int
- 如何在python中将ObjectId转换为String
- 将c#string[]转换为json
- 将属性从Int转换为String,并在KnockoutJS中显示
- 将JSONArray转换为javascript中的String以发送到java
- 使用 Javascript 或 jQuery 将 Array-String 转换为对象
- 大的 JavaScript ints 不会在没有舍入的情况下转换为 String
- 如何将String转换为对象类型
- Javascript将String转换为Object属性
- 在Javascript中将XMLDocument对象转换为String
- 在Javascript中将String(从objc传递)转换为Array
- 将String转换为Json-javascript
- 将String转换为方法参数,特别是在console.log中
- ibmmobilefirst-Class Cast:java.lang.String不能转换为org.mozilla.j
- 将JSON数组[array[String]]转换为Java数组