【问题标题】:How do I check if an object is within an array in Javascript?如何检查对象是否在 Javascript 的数组中?
【发布时间】:2021-01-08 20:25:37
【问题描述】:

我被困在一个项目中,我试图从一个超大的 Google Maps Timeline json 中提取相关数据,并遇到了结构不像我想象的那样有序的问题。从本质上讲,我试图从这个 json 中提取地址、时间、日期和里程,以便为我的汽车每次旅行。为了使用这些数据,我将它粘贴到一个普通的 javascript 文件中并命名它,这样我就可以将它用作一个对象。然后,我获取这些数据并创建一个字符串,该字符串将像 CSV 文件一样格式化该信息。

通过仅查看几次行程来检查 json 的结构,我能够确定以下一般结构:

const google = {
   timelineObjects: [
      0: {activitySegment: {A NUMBER OF OBJECTS}},
      1: {placeVisit : {A NUMBER OF OBJECTS}},
      2: {activitySegment: {A NUMBER OF OBJECTS}},
      3: {placeVisit : {A NUMBER OF OBJECTS}}
   ]
}

activitySegment 包含所有旅行信息,例如距离、旅行时间等。placeVisit 包含有关目的地的信息。在我的小样本中,我能够使用 i%2=0 的 if 语句循环遍历每个,然后更改我想从每个中提取的内容,效果很好。

当我尝试添加更大的样本时,我发现 Google 偶尔没有创建 activitySegment 对象,只有一个 placeVisit,它抛出“Uncaught TypeError: Cannot read property 'distance' of undefined”。

我确信偶数/奇数排序将不再有效。有没有办法使用条件来显示 google[timelineObjects][i] 是 {activitySegment} 还是 {placeVisit}?或者,有没有更好的方法来确定数组中的下一个对象是什么?

【问题讨论】:

标签: javascript arrays loops object


【解决方案1】:

您可以使用Object.prototype.hasOwnProperty() 测试特定数组索引处的对象是否具有给定属性:

const google = {
   timelineObjects: [
      {activitySegment: {}},
      {placeVisit : {}},
      {activitySegment: {}},
      {placeVisit : {}}
   ]
};

console.log(google.timelineObjects[0].hasOwnProperty("activitySegment")); // true
console.log(google.timelineObjects[1].hasOwnProperty("activitySegment")); // false

【讨论】:

  • 感谢您的快速回复!有什么办法可以做到这一点,看看之前的对象是什么?在这种情况下,有没有办法检查是否有两个 placeVisit 对象背靠背,以便我可以在活动段会去的地方填写通用数据?
  • 在遍历数组时,只需访问当前索引 - 1 并执行相同的检查,然后分别应用您的逻辑。
【解决方案2】:

如果您的目标是查看您获得的对象类型。您可以遍历每个对象,查看对象的键是什么,并根据键值处理数据。像这样。

Object.entries(google).forEach(([key, value]) => {
   if(key==='activitySegment') {
     //process activeSegment here   
   }else {
     //process placeVisit here
   }
})

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-05-31
    • 2017-06-22
    • 1970-01-01
    • 1970-01-01
    • 2020-11-19
    • 2018-12-01
    • 2021-05-12
    相关资源
    最近更新 更多