在JavaScript中遍历数组,查找常见事件
每隔2.5秒,我从服务器获取一个数组,该数组包含用户对象。我将每个数组分配给全局变量,10秒后将有4个数组包含以下数据。我想检查一个用户是否在所有这些数组中,如果任何用户出现在多个数组中,我将创建一个数组并循环,并在屏幕上显示,否则放弃这些数组。我收集了数据。它类似于RTLS,确保用户在10秒的时间内在场。我不知道如何在JavaScript中实现它。非常感谢您的见解。多谢各位在JavaScript中遍历数组,查找常见事件,javascript,arrays,Javascript,Arrays,每隔2.5秒,我从服务器获取一个数组,该数组包含用户对象。我将每个数组分配给全局变量,10秒后将有4个数组包含以下数据。我想检查一个用户是否在所有这些数组中,如果任何用户出现在多个数组中,我将创建一个数组并循环,并在屏幕上显示,否则放弃这些数组。我收集了数据。它类似于RTLS,确保用户在10秒的时间内在场。我不知道如何在JavaScript中实现它。非常感谢您的见解。多谢各位 [ [ { "id": "6aa35f46-bf31-481e-bac5
[
[
{
"id": "6aa35f46-bf31-481e-bac5-a83b012ed1f0",
"proximity": "NEAR",
"dateTime": "2017-12-03T14:40:02.5157777",
"personName": "JOHN"
},
{
"id": "1b1f7caf-8bed-4f1d-8c71-a83a0131e71c",
"proximity": "NEAR",
"dateTime": "2017-12-03T14:40:02.5157777",
"personName": "JANE"
},
{
"id": "a6aec29a-a7fa-4d29-82cb-a83b00fedd36",
"proximity": "NEAR",
"dateTime": "2017-12-03T14:40:02.5157777",
"personName": "Sara",
}
],
[
{
"id": "6aa35f46-bf31-481e-bac5-a83b012ed1f0",
"proximity": "NEAR",
"dateTime": "2017-12-03T14:40:02.5157777",
"personName": "JOHN"
},
{
"id": "a6aec29a-a7fa-4d29-82cb-a83b00fedd36",
"proximity": "NEAR",
"dateTime": "2017-12-03T14:40:02.5157777",
"personName": "JANE"
}
],
[
{
"id": "6aa35f46-bf31-481e-bac5-a83b012ed1f0",
"proximity": "NEAR",
"dateTime": "2017-12-03T14:40:02.5157777",
"personName": "MIKE"
} ,
{
"id": "6aa35f46-bf31-481e-bac5-a83b012ed1f0",
"proximity": "NEAR",
"dateTime": "2017-12-03T14:40:02.5157777",
"personName": "JOHN"
},
{
"id": "a6aec29a-a7fa-4d29-82cb-a83b00fedd36",
"proximity": "NEAR",
"dateTime": "2017-12-03T14:40:02.5157777",
"personName": "JANE"
}
]
]
您描述的问题有一个特殊属性:如果所有数组中都包含任何用户,那么它将出现在第一个数组中 要实现这一点,如果需要单个用户,可以使用Array#find(),如果需要多个用户,可以使用Array#filter() 第二个属性:如果该用户在任何数组中丢失,您将丢弃数组 为此,请使用Array#some(),测试外部用户(来自上面)是否不属于任何其他数组。如果some()返回true,则过滤掉用户
这里有一个简单的算法,可以检测一个用户是否在所有这些数组中,是否有任何用户出现在多个数组中
var数据=[
[{
“id”:“6aa35f46-bf31-481e-bac5-a83b012ed1f0”,
“接近”:“接近”,
“日期时间”:“2017-12-03T14:40:02.5157777”,
“人名”:“约翰”
},
{
“id”:“1b1f7caf-8bed-4f1d-8c71-a83a0131e71c”,
“接近”:“接近”,
“日期时间”:“2017-12-03T14:40:02.5157777”,
“人名”:“简”
},
{
“id”:“a6aec29a-a7fa-4d29-82cb-a83b00fedd36”,
“接近”:“接近”,
“日期时间”:“2017-12-03T14:40:02.5157777”,
“人名”:“莎拉”,
}
],
[{
“id”:“6aa35f46-bf31-481e-bac5-a83b012ed1f0”,
“接近”:“接近”,
“日期时间”:“2017-12-03T14:40:02.5157777”,
“人名”:“约翰”
},
{
“id”:“a6aec29a-a7fa-4d29-82cb-a83b00fedd36”,
“接近”:“接近”,
“日期时间”:“2017-12-03T14:40:02.5157777”,
“人名”:“简”
}
],
[{
“id”:“6aa35f46-bf31-481e-bac5-a83b012ed1f0”,
“接近”:“接近”,
“日期时间”:“2017-12-03T14:40:02.5157777”,
“人名”:“迈克”
}]
]
函数findCommon(arr,len){
常数平坦=arr
.map(dimension=>dimension.map(e=>e.id))
.reduce((uniq,collection)=>{
collection.forEach(元素=>{
if(uniq[element])uniq[element]++
else uniq[元素]=1
});
返回uniq
}, {})
返回Object.keys(flat.filter(k=>flat[k]==len)
}
log('present in all',findCommon(data,data.length));
log('存在于2',findCommon(数据,2))代码>阅读文本很难理解你想要完成什么。你能澄清一下“检查一个用户是否在所有这些数组中,是否有任何用户出现在多个数组中”和“创建一个数组并循环通过”吗?“我不知道如何在JavaScript中实现它”你会如何用另一种语言实现它?您在使用javascript时遇到的问题是什么?正如您所看到的,JOHN和JANE都在其中,MIKE只在其中一个中,我想丢弃所有不在其中的对象。我没有javascript方面的经验。有很多糖衣,就像扩展方法和内置方法一样。我不想走错方向。这一个很接近,它只检查一个,如果我在所有数组中输入id“6aa35f46-bf31-481e-bac5-a83b012ed1f0”和“1b1f7caf-8bed-4f1d-8c71-a83a0131e71c”,它只返回一个id,有什么见解吗?我应该返回两个idsupdated(Object.keys(flat.filter)(k=>flat[k]==len)
),再次尝试使用没有javascript经验的操作。这将有助于解释代码的作用。它工作得很好,只需要创建字典将ID存储为键,将personName存储为值。感谢Medet Tleukabiluly…实际上,您可以调整上面的脚本以返回实际用户而不是id