从Javascript中的对象数组过滤未定义

时间:2020-03-03 19:20:52

标签: javascript arrays object

我在从本地存储创建的对象数组中整理undefined时遇到麻烦。假设该对象数组为localStorage:

var arrObject = [{date: undefined, bus_name: Thomas #1};...]假设这有2个未定义的日期。

我希望能够过滤出未定义的日期和该日期内的bus_name,因此,例如,如果在对对象进行排序之前将过滤器用于对象数组,则{date: undefined, bus_name: Thomas #1}将不会包含在要排序的数组中。

我该怎么做?

谢谢!

更新:3/5/20

如果我有多于2列,比如说我至少有5列,我要如何过滤和排序日期以及仅输出日期和bus_name

var arrObject = [{date: undefined, bus_name: Thomas #1, bus_driver: Thomas, time_start: 9AM, time_end: 5PM};...]

输出:{date: ..., bus_name:...}; {...}

2 个答案:

答案 0 :(得分:2)

我认为您应该为过滤器提供条件字段(一个是日期,另一个是bus_name)

无论如何,我想弄清楚:-

 i) arrObject.filter(e => e.date)  // with this all {date: undefined } contain object will be filter and get data which have actual date value 

 ii) arrObject.filter(e => e.date === undefined) // give filter result with all date undefined  
iii) arrObject.filter(e => e.date === undefined && e.bus_name ) or arrObject.filter(e => e.date && e.bus_name)

您期望的结果之一

答案 1 :(得分:1)

您可以使用此方法:

const arrObject = [
{date: undefined, bus_name: 'Thomas #1'},
{date: '2012-02-11', bus_name: 'Thomas #2'},
{date: '2012-02-02', bus_name: 'Thomas #3'},
{date: '2012-02-04', bus_name: 'Thomas #4'},
{date: undefined, bus_name: 'Thomas #5'},
{date: '2012-02-03', bus_name: 'Thomas #6'},
{date: '2012-02-03', bus_name: 'Thomas #7'},
]
function formatTheDate (str){
  //your format here
  let FormatedDate = "new Date format" + str 
  return FormatedDate
}

let newArray = arrObject.filter( obj => {
  obj.formattedDate = formatTheDate(obj.date)
  //behave same as obj.date != undefined
  return obj.date
}).sort((a,b)=>{
  return Date.parse(a.date) - Date.parse(b.date)
})

console.log(newArray);


编辑:更新了答案以根据日期返回排序结果;