【问题标题】:Getting total objects in array inside object获取对象内数组中的总对象
【发布时间】:2016-08-29 20:07:16
【问题描述】:

我正在尝试获取数组中的长度或对象总数。 我正在创建一个 slickEventData 对象并将该对象推入 eventsArray。 所以我最终得到一个包含对象的数组。 我想获取此数组中 slickEventData 对象的总数。 当我使用长度时,我得到了错误的数字,我得到了钥匙的总数?不是对象。

我的代码

var slickEventData = {}
console.log(event);

slickEventData.module = "slick_module"
slickEventData.eventType = event.type;
slickEventData.leadboxId = "a"//container.getAttribute("data-leadbox-id");
slickEventData.advertId = advertId;
slickEventData.length = "length of event"
slickEventData.time = Date.now();
slickEventData.posted = "postedStatus"
eventsArray.push(slickEventData)

console.log("events Array " + JSON.stringify(eventsArray))
console.log("events Array length " + eventsArray.length)

if (!sessionStorage.events) {
  console.log("no old events found")
  sessionStorage.events = eventsArray;
  console.log(sessionStorage.events);
}

else if (sessionStorage.events) {
  var oldEvents = sessionStorage.events;
  console.log("old events length " + oldEvents.length);
  console.log("updated events array met oldData " + eventsArray);
  alert(JSON.stringify(oldEvents));
  //loop thru old events to add them to current events and add these to the sessionStorage
  //postTrackingData(sessionStorage.events);
}
//sessionStorage.events = eventsArray;// add events to storage
console.log("session = " + (JSON.stringify(sessionStorage)))

这些是我的尝试。我猜它正在计算所有键和值以及数组作为对象,当我使用 oldEvents.length 时返回 15 个对象。 eventsArray.length 返回正确的值。 将此数组添加到 sessionStorage.events 中是否会搞砸?

我将如何查找 oldEvents 中有多少对象?

我可能完全错了

编辑:

oldEvents 返回 [object Object] 所以看起来没有多个对象 eventsArray 返回 [object Object]、[object Object] 等多个对象。

他们不应该返回相同的吗? 我只是将 eventsArray 添加到 sessionStorage 然后检索它

我的目标是在事件发生时不断将它们推送到 sessionStorage 中,而不是在刷新之间丢失它们。

【问题讨论】:

  • 数组中的内容无关紧要; array.length 总是会返回该数组中的项目/对象的数量。您是否正确初始化了eventsArray
  • 尝试添加一个 console.log(oldEvents) 语句(没有 JSON.stringify)。在 Chrome 或 Firefox 中,您将能够浏览阵列并方便地检查其内容。确保数组包含您所期望的。
  • 嗯 oldEvents 返回 [object Object]。但是 eventsArray 返回 [object Object]、[object Object] 等。
  • console.log() 或 .dir() 应该以树状、可扩展的层次结构向您显示所有对象。这样你就可以准确地看到你的变量包含什么。为此使用 Chrome。最终你有一个额外的层,例如Array[Array[Obj,Obj]] 而不是预期的 Array[Obj,Obj]。检查stackoverflow.com/questions/4482950/…
  • 是的,我认为这也是问题所在,但由于某种原因,chrome 并不总是让我像应有的那样扩展对象。我想我要下载萤火虫看看是否会更好。就像我说的它返回 [object Object] 但它不会让我扩展它

标签: javascript arrays object


【解决方案1】:

[object object] 是您在对象上调用 .toString() 时得到的结果。

您不能在 devtools 中扩展字符串。我会采取你做一些无意的类型转换的角度。

sessionStorage.events = eventsArrayoldEvents = sessionStorage.events 在我看来很可疑。

LocalStorage 和 SessionStorage 只接受字符串的键值对。它不会为您字符串化您的对象,而是调用其中的.toString()。我相信问题在于您没有将字符串化数组存储到 SessionStorage 中,因此当您将其取出时,它不是数组而是字符串,您调用的是字符串的 .length

我可以建议这些更改吗:

//Setting storage items
sessionStorage.setItem('events', JSON.stringify(eventsArray));

//reading storage items
JSON.parse(sessionStorage.getItem('events'));

编辑:虽然这可能不是直接回答问题,但它仍然(我相信)有价值的信息并且太大而无法在评论中解释。

【讨论】:

  • 是的,我刚刚发现我做错了什么。现在我明确地要在之前对其进行字符串化并在之后对其进行解析。既然你解决了这个问题,我想把这个标记为答案。
猜你喜欢
  • 2021-05-14
  • 2021-08-22
  • 2022-10-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-11-10
  • 2019-12-11
相关资源
最近更新 更多