2017-03-05 74 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