Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Javascript中检查对象是否在数组中?_Javascript_Arrays_Loops_Object - Fatal编程技术网

如何在Javascript中检查对象是否在数组中?

如何在Javascript中检查对象是否在数组中?,javascript,arrays,loops,object,Javascript,Arrays,Loops,Object,我被困在一个项目中,我试图从一个超大规模的谷歌地图时间线json中提取相关数据,并遇到了结构不像我想象的那样有序的问题。从本质上讲,我试图从这个json中提取出我每次开车旅行的地址、时间、日期和里程数。为了使用这些数据,我将其粘贴到一个普通的javascript文件中,并将其命名,以便将其用作对象。然后,我获取这些数据并创建一个字符串,将该信息格式化为CSV文件 通过仅查看几次行程来查看json的结构,我能够确定以下一般结构: const google = { timelineObject

我被困在一个项目中,我试图从一个超大规模的谷歌地图时间线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包含有关目的地的信息。在我的小样本中,我可以使用一个if语句在I%2=0的情况下循环遍历每一条语句,然后只更改我想要从每一条语句中提取的内容,效果很好

当我尝试添加一个更大的示例时,我发现Google偶尔没有创建activitySegment对象,只有placeVisit,这会抛出“UncaughtTypeError:无法读取未定义的属性‘距离’”


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

您可以使用以下方法测试特定数组索引处的对象是否具有给定属性:

constgoogle={
时间线对象:[
{activitySegment:{},
{地点访问:{},
{activitySegment:{},
{placeVisit:{}
]
};
console.log(google.timelineObjects[0].hasOwnProperty(“activitySegment”);//真的

console.log(google.timelineObjects[1].hasOwnProperty(“activitySegment”);//如果您的目标是查看得到的对象类型,则为false。您可以迭代每个对象,查看对象的键是什么,并根据键值处理数据。像这样的

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

您是否尝试过类似于中的
并映射对象的键?谢谢你的快速回复!有没有办法做到这一点,看看前面的对象是什么?在这种情况下,有没有办法检查是否有两个placeVisit对象背靠背,这样我就可以在活动段所在的位置填写通用数据?在数组上循环时,只需访问当前索引-1并执行相同的检查,然后分别应用逻辑。