javascript - JS/ES6 : Check if every array element has a child in another array

标签 javascript arrays

共有三个对象数组,如下所示:

sections = [{ _id: '123'}]
groups   = [{ _id: '456', parent: '123' }]
items    = [{ _id: '789', parent: '456' }]

这是一个有效的数据集。当然数组中有多个对象。

现在我想检查每个部分是否至少有一个子组,并且每个组至少有一个项目。 如果此检查失败,则应返回 false 值。

示例

sections = [{ _id: '123'}]
groups   = [{ _id: '456', parent: '123' }]
items    = [{ _id: '789', parent: 'something' }]

complete = false

在此示例中,应返回 false,因为该组没有子项。

我尝试从 forEach 循环开始,但这是一个错误的尝试:

let complete = true
sections.forEach(s => {
    if (groups.filter(g => { return g.parent === s._id }).length === 0)
        complete = false
})

最佳答案

看起来你有一个三个数组。两个包含用作父元素的对象,两个包含用作子元素的对象。您想要检查父级列表中的每个父级是否都有已定义的子级。

可以使用辅助函数 everyParentHasChild(parents, Children) 来实现此功能,该函数基于更高级别的数组方法 Array#every 构建数组#some.

let sections = [{ _id: '123'}]
let groups   = [{ _id: '456', parent: '123' }]
let items    = [{ _id: '789', parent: '456' }]

let everyParentHasChild = (parents, children) => parents.every(
  parent => children.some(child => child.parent === parent._id)
)

let result = everyParentHasChild(sections, groups) && everyParentHasChild(groups, items)

console.log(result) //=> true

关于javascript - JS/ES6 : Check if every array element has a child in another array,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42592443/

相关文章:

javascript - 使用 jQuery Tabs 启用选项卡

javascript - 尝试在点击事件中创建点击事件但未获得所需结果

c# - 实时聊天消息队列,ASP.NET

Delphi - 字节数组[0..693] - 转 B64 编码字符串

ios - 显示来自对象的 TableView 行 - iOS Swift

python - 在 python 中,如何将数组/列表与数字进行比较

javascript - Vue JS 中的图片路径

javascript - 无法格式化默认 MySQL 日期时间

javascript - AFrame - 是否可以用没有黑色边框的自定义图像替换标记?

c - 如何修复这个简单的加密程序中的段错误?