Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/457.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.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 - Fatal编程技术网

在JavaScript中遍历数组,查找常见事件

在JavaScript中遍历数组,查找常见事件,javascript,arrays,Javascript,Arrays,每隔2.5秒,我从服务器获取一个数组,该数组包含用户对象。我将每个数组分配给全局变量,10秒后将有4个数组包含以下数据。我想检查一个用户是否在所有这些数组中,如果任何用户出现在多个数组中,我将创建一个数组并循环,并在屏幕上显示,否则放弃这些数组。我收集了数据。它类似于RTLS,确保用户在10秒的时间内在场。我不知道如何在JavaScript中实现它。非常感谢您的见解。多谢各位 [ [ { "id": "6aa35f46-bf31-481e-bac5

每隔2.5秒,我从服务器获取一个数组,该数组包含用户对象。我将每个数组分配给全局变量,10秒后将有4个数组包含以下数据。我想检查一个用户是否在所有这些数组中,如果任何用户出现在多个数组中,我将创建一个数组并循环,并在屏幕上显示,否则放弃这些数组。我收集了数据。它类似于RTLS,确保用户在10秒的时间内在场。我不知道如何在JavaScript中实现它。非常感谢您的见解。多谢各位

[
    [
        {
            "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