2017-03-04 27 views
0

有三个对象数组是这样的:JS/ES6:检查每个数组元素,在另一个数组孩子

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 

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

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

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

是正确的说,'section'是'groups'的父母和'groups'是'items'的家长吗?并且你期望每个'section'都将他们的id注册为一个或多个'group'的父属性,以此类推 - 对于groups - > items?否则,它是不完整的? –

+0

是的,那是正确的 – user3142695

回答

3

它看起来像你有三个数组。两个包含充当父元素的对象,另外两个包含充当子元素的对象。您想要检查父母名单中的每个父母是否有定义的孩子。

该功能可以使用帮助函数everyParentHasChild(parents, children)来实现,该函数建立在更高级别的数组方法Array#everyArray#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

+1

好的工作。你在我做之前十秒钟发布了与我相同的解决方案(帮助函数和全部)。我会删除我的。 – nnnnnn

+1

同意;我非常喜欢这个答案。我提出了另一种解决方案,但这更优雅 –

+0

感谢您的支持:)我喜欢这些新的阵列功能,我迫不及待地等到ES6功能将成为所有SO问题的公平游戏,因为这些问题由于压倒性的浏览器支持。 – gyre

0

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

 
const isComplete = function() { 
 
    // check sections 
 
    for (const section of sections) { 
 
    if (!groups.filter(group => group.parent == section._id).length) { 
 
     return false; 
 
    } 
 
    } 
 
    // check groups 
 
    for (const group of groups) { 
 
    if (!items.filter(item => item.parent == group._id).length) { 
 
     return false; 
 
    } 
 
    } 
 
    return true; 
 
}; 
 

 
console.log(isComplete());

相关问题