2017-06-07 53 views
-1
{ 
    "June": [ 
    { 
     "id": "59361b2fa413468484fc41d29d5",  
     "is_new": false, 
     "name":"John" 
     "updated_at": "2017-06-07 10:52:05", 
    } 
    ] 
} 

我有上面的對象,它內有對象數組,我試圖檢查'六月',有沒有is_new,但失敗?迭代使用對象鍵和findIndex失敗

const has_any_is_new = Object.keys(arr).map(obj => 
    arr[obj].map(obj2 => obj2.findIndex(o => o.is_new) > -1) 
); 
+0

的可能的複製[迭代通過對象屬性(https://stackoverflow.com/questions/8312459/iterate-through-object-properties) – Michelangelo

+0

你忘了一個逗號在'name'屬性之後。你也可以在'updated_at'後面刪除逗號。 – Chris

+2

而不是使用'findIndex(...)> -1',你應該做一些(...)' – Bergi

回答

0

如果你想測試是否有任何六月數組中的項目已經is_new==true,您可以使用.some

let months = { 
 
    "June" : [ 
 
    { 
 
     "id": "59361b2fa413468484fc41d29d5",  
 
     "is_new": false, 
 
     "name":"John", 
 
     "updated_at": "2017-06-07 10:52:05", 
 
    }, 
 
    { 
 
     "id": "59361b2fa413468484fc41d29d6",  
 
     "is_new": true, 
 
     "name":"John2", 
 
     "updated_at": "2017-06-07 10:52:05", 
 
    } 
 
    ] 
 
} 
 

 
const has_any_is_new = Object.keys(months).some(month => 
 
    months[month].some(obj => obj.is_new) 
 
); 
 

 
console.log(has_any_is_new)

.map只是運行對每個元素的功能在一個數組中。

.some如果它應用的任何函數返回true,則返回true。

+0

有的只是返回true或false吧?比較類似於過濾器,只是過濾器返回數組,我是嗎? –

+0

是的,這是正確的。參見[Array.prototype.some](https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Array/some) –

-1

你有一個map太多。 arr[obj]已經指的是「六月」對象數組,因此obj2擁有.is_new屬性,但沒有map方法。使用

const obj = { "June": […] }; 
const news = Object.keys(obj).map(key => 
    [key, obj[key].some(o => o.is_new)] 
); // an array of month-boolean-tuples 

const has_any_is_new = Object.keys(obj).some(key => 
    obj[key].some(o => o.is_new) 
); // a boolean whether any month has a new entry