2017-03-04 196 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());

相關問題