2017-03-05 77 views
0

我有要添加到數組中的行的列表。如果其中一個元素丟失,則需要忽略該記錄。有人可以請建議如何在JS中做到這一點?要忽略元素的數組是misisng

這裏將被加入到新陣列中的數據:

{"start":"20161229T160000","end":"20161229T164500","summary":"JJ1"}, 
{"start":"20170106T180000","end":"20170106T183000","rule":"FREQ=WEEKLY;BYDAY=FR","summary":"JJ2"}, 

我試圖檢查if (rrule !==null)(rrule!='undefined') ...毫無效果..其不斷增加的行到數組列表.. :(

我不希望添加第一個記錄到array..as rrule元素缺失。

我會很感激的任何建議。

+0

數據來自哪裏?你想明確測試'start','end','rule'還是'summary',還是足以測試每個對象至少有四個屬性? – nnnnnn

+0

我正在傳遞來自不同數組的數據(這是從原始數據中提取的) – TTT

+0

第二個元素具有'rule'屬性。什麼是'rrule'? –

回答

1

如果item是數據對象之一,你可以用hasOwnProperty()測試:

if (item.hasOwnProperty('rule')) { 
    // add to array 
} 

,將工作,即使rule值是「falsy」值(例如,{...,"rule": 0,...})。

:如果要排除那些爲好,只是使用

if (item.rule) { ... } 
+0

真棒.....它工作!謝謝你的幫助! – TTT

0

假設你的輸入對象的數組,你可以很容易地通過使用array .filter() method得到的只是具有所需性能的那些數組

var input = [ 
 
    {"start":"20161229T160000","end":"20161229T164500","summary":"JJ1"}, 
 
    {"start":"20170106T180000","end":"20170106T183000","rule":"FREQ=WEEKLY;BYDAY=FR","summary":"JJ2"}, 
 
    {"start":"20161229T160000"}, 
 
    {"start":"20170205T180000","end":"20170206T183000","rule":"FREQ=WHATEVER;BYDAY=FR","summary":"XYZ"} 
 
]; 
 

 
var output = input.filter(function(item) { 
 
    return item.start != undefined 
 
     && item.end != undefined 
 
     && item.rule != undefined 
 
     && item.summary != undefined; 
 
}); 
 

 
console.log(output);

你嘗試if (rrule !==null)沒有工作,因爲失蹤的屬性不是null。您的嘗試(rrule!='undefined')沒有工作,因爲它正在測試字符串'undefined',而不是值undefined。請注意,如果某個屬性的值爲undefined,那麼您應該使用item.hasOwnProperty('rule')而不是item.rule != undefined進行測試。

+0

感謝您的詳細解釋,這是有道理的,並得到它爲什麼以前沒有工作.... – TTT