使用javascript es6从包含唯一ID和嵌套数组的多个对象数组中获取公共数据

阿比玛努·夏尔玛

我试图从包含唯一 id(mongoose 对象 id)和字符串数组的多个对象数组中查找公共数据。

例如:

array1 = [{
             _id: "60f027f98b55eb2df1f36c04",
             date: "2021-07-15T12:18:12.223Z",
             time: "30",
             hours: ["8:00 AM", "8:30 AM"]
        }]
array2 = [{
             _id: "60f027f98b55eb2df1f36c05",
             date: "2021-07-15T12:18:12.223Z",
             time: "60",
             hours: ["7:30 AM", "8:30 AM", "9:30AM"]
        }]
array3 = [{
             _id: "60f027f98b55eb2df1f36c06",
             date: "2021-07-16T12:12:12.223Z",
             time: "30",
             hours: ["7:00 AM", "8:30 AM"]
        }]

输出应在数组中具有最大公共日期的最大公共值,并且该日期应具有最大公共小时。

所以示例输出应该是这样的。

common_data = {
    date: "2021-07-15T12:18:12.223Z",
    time: "30",
    hours: "8:30AM"
}

我查看了其他答案并尝试了类似的方法:合并所有数组并

let result = merged_slots_array.shift().filter(function(v) {
    return merged_slots_array.every(function(a) {
        const matchDate = a.date === v.date;
        const getMatchTime = a.hours.shift().filter(function(x) {
            return v.hours.every(function(t) {
                return x.indexOf(t) !== -1;
            })
        });
        return matchDate && getMatchTime
    });
});

但得到错误 merged_slots_array.shift(...).filter is not a function

英式英语

连接数组后,可以通过只保留重复项的过滤器找到最大公共小时,然后进行排序。一旦我们有了它,我们就可以查询每个数组以确保它包含最大小时数,然后提取最大日期和时间。我的输出与你的略有不同,因为我过滤了最大时间、小时和日期

array1 = [{
  _id: "60f027f98b55eb2df1f36c04",
  date: "2021-07-15T12:18:12.223Z",
  time: "30",
  hours: ["8:00 AM", "8:30 AM"]
}]
array2 = [{
  _id: "60f027f98b55eb2df1f36c05",
  date: "2021-07-15T12:18:12.223Z",
  time: "60",
  hours: ["7:30 AM", "8:30 AM", "9:30AM"]
}]
array3 = [{
  _id: "60f027f98b55eb2df1f36c06",
  date: "2021-07-16T12:12:12.223Z",
  time: "30",
  hours: ["7:00 AM", "8:30 AM"]
}]

const getCommon = (arrays) => {
let group = [].concat.apply([], [...arrays])
let hour = group.map(e=>e.hours).flat().filter((e,i,a) => a.indexOf(e) !== i).sort((a,b) => a.localeCompare(b))[0]
let common = group.filter(e=>e.hours.includes(hour))
let time = Math.max(...common.map(e => +e.time))
let date = common.map(e => e.date).sort((a,b) => new Date(b) - new Date(a))[0];
return {date: date, time: time, hours: [hour]}
}
let arg = []
arg.push(array1)
arg.push(array2)
arg.push(array3)
console.log(getCommon(arg))

TS游乐场

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

将嵌套对象转换为递归数组或javascript es6中的嵌套数组

如何使用一个公共字段提取数据并在javascript中制作嵌套数组

使用Go访问嵌套数组和对象中的数据

数组中包含嵌套数组中值的Javascript列表对象

JavaScript:创建将嵌套数组中的数据转换为具有多个对象的一个数组的函数

Javascript/ES6 从 1 级对象生成嵌套数组

获取包含嵌套数组中值的对象的索引 - JavaScript

JavaScript - 如何将多个嵌套数组中的所有对象放入一个新的唯一对象数组

Javascript过滤嵌套数组以排除不包含多个元素之一的对象

如何使用javascript创建嵌套数组以获取多个账单?

javascript使用id列表从嵌套数组中提取对象

在es6中使用map映射嵌套数组

在ES6中使用单个公共密钥合并X个对象数组的数组

使用ES6从数组ID中删除对象列表

将对象转换为包含多个JavaScript对象的数组的理想方法是什么?(允许使用ES6)

如何使用jQuery在JavaScript中循环嵌套数组对象

在 javascript 中,如何从 json 数据创建嵌套数组或对象?

如何在对象数组的嵌套数组中获取数组对象javascript

使用php从json中的嵌套数组获取数据

从javascript嵌套数组中获取值

使用 ramda 在嵌套数组中查找具有给定 id 的对象,获取除子数组之外的所有属性

如何使用es6展平嵌套的对象数组

使用spread减少es6丢失的嵌套对象数组

ES6方法-通过键从嵌套数组中获取唯一值

Javascript或lodash:使用嵌套数组的值过滤对象数组

如何使用 ES6 函数将每个对象中具有公共 id 的对象数组组合起来

在与ES6深度嵌套的对象的javascript数组中寻找价值

从 JS 中的多个对象数组中获取唯一值 - javascript 中的正确方法

需要使用3个不同数组中的嵌套数据形成一个数组对象