从 Javascript 中的对象数组中过滤未定义或空字符串
Filtering undefined or empty strings from array of objects in Javascript
所以我在创建一个函数时遇到了问题,该函数将过滤和排序日期及其数据以放置在对象数组中。我遇到的问题是一个不同但相似的场景。原始问题取自此处:
假设 var arrObject 在一个数组中有超过 2 个项目。请参阅代码 below.I 想要过滤任何空字符串或未定义的值以及数组中的任何项目,然后按升序排序。按日期排序。在新数组中,我只想输出日期和 bus_name。请注意数组中的名称不同,我想用不同的名称命名,例如此输出:
{Date: '2012-02-11', busName: 'Thomas #2'}. ...
我该如何完成?
谢谢!
{date: " ", bus_name: 'Thomas #1', driver_name: 'Sam', time_start: '9AM', time_end: '5PM'},
{date: '2012-02-11', bus_name: 'Thomas #2', driver_name: 'Samantha', time_start: '8AM', time_end: '4PM'},
{date: '2011-02-02', bus_name: 'Thomas #3', driver_name: 'Peter', time_start: '12PM', time_end: '7PM'},
{date: '2010-06-04', bus_name: 'Thomas #4', driver_name: 'Eddie', time_start: '11AM', time_end: '6PM'},
{date: " ", bus_name: 'Thomas #5', driver_name: 'Raul', time_start: '4AM', time_end: '1PM'},
{date: '2014-04-03', bus_name: 'Thomas #6', driver_name: 'Jessie', time_start: '5AM', time_end: '2PM',
]
function fancySort(array){
let arrayCopy = array.slice(0);
//your sort logic can be replaced here
arrayCopy.sort();
return arrayCopy
}
let newArray = arrObject.filter( obj => {
//behave same as obj.date != undefined
return obj.date
})
let sortedDates = fancySort(newArray.map(obj => Date.parse(obj.date)));
let sortedObjArray = sortedDates.map( date=>{
let tempObj;
newArray.some( na=> {
tempObj = na;
return Date.parse(na.date) == date
})
return tempObj;
})
console.log(sortedObjArray);```
您可以过滤不需要的部分,映射具有所需属性的新对象并按 date
对数组进行排序。
var array = [{ date: " ", bus_name: 'Thomas #1', driver_name: 'Sam', time_start: '9AM', time_end: '5PM' }, { date: '2012-02-11', bus_name: 'Thomas #2', driver_name: 'Samantha', time_start: '8AM', time_end: '4PM' }, { date: '2011-02-02', bus_name: 'Thomas #3', driver_name: 'Peter', time_start: '12PM', time_end: '7PM' }, { date: '2010-06-04', bus_name: 'Thomas #4', driver_name: 'Eddie', time_start: '11AM', time_end: '6PM' }, { date: " ", bus_name: 'Thomas #5', driver_name: 'Raul', time_start: '4AM', time_end: '1PM' }, { date: '2014-04-03', bus_name: 'Thomas #6', driver_name: 'Jessie', time_start: '5AM', time_end: '2PM' }],
result = array
.filter(o => o.date !== ' ')
.map(({ date, bus_name }) => ({ date, bus_name }))
.sort((a, b) => a.date.localeCompare(b.date));
console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }
所以我在创建一个函数时遇到了问题,该函数将过滤和排序日期及其数据以放置在对象数组中。我遇到的问题是一个不同但相似的场景。原始问题取自此处:
假设 var arrObject 在一个数组中有超过 2 个项目。请参阅代码 below.I 想要过滤任何空字符串或未定义的值以及数组中的任何项目,然后按升序排序。按日期排序。在新数组中,我只想输出日期和 bus_name。请注意数组中的名称不同,我想用不同的名称命名,例如此输出:
{Date: '2012-02-11', busName: 'Thomas #2'}. ...
我该如何完成?
谢谢!
{date: " ", bus_name: 'Thomas #1', driver_name: 'Sam', time_start: '9AM', time_end: '5PM'},
{date: '2012-02-11', bus_name: 'Thomas #2', driver_name: 'Samantha', time_start: '8AM', time_end: '4PM'},
{date: '2011-02-02', bus_name: 'Thomas #3', driver_name: 'Peter', time_start: '12PM', time_end: '7PM'},
{date: '2010-06-04', bus_name: 'Thomas #4', driver_name: 'Eddie', time_start: '11AM', time_end: '6PM'},
{date: " ", bus_name: 'Thomas #5', driver_name: 'Raul', time_start: '4AM', time_end: '1PM'},
{date: '2014-04-03', bus_name: 'Thomas #6', driver_name: 'Jessie', time_start: '5AM', time_end: '2PM',
]
function fancySort(array){
let arrayCopy = array.slice(0);
//your sort logic can be replaced here
arrayCopy.sort();
return arrayCopy
}
let newArray = arrObject.filter( obj => {
//behave same as obj.date != undefined
return obj.date
})
let sortedDates = fancySort(newArray.map(obj => Date.parse(obj.date)));
let sortedObjArray = sortedDates.map( date=>{
let tempObj;
newArray.some( na=> {
tempObj = na;
return Date.parse(na.date) == date
})
return tempObj;
})
console.log(sortedObjArray);```
您可以过滤不需要的部分,映射具有所需属性的新对象并按 date
对数组进行排序。
var array = [{ date: " ", bus_name: 'Thomas #1', driver_name: 'Sam', time_start: '9AM', time_end: '5PM' }, { date: '2012-02-11', bus_name: 'Thomas #2', driver_name: 'Samantha', time_start: '8AM', time_end: '4PM' }, { date: '2011-02-02', bus_name: 'Thomas #3', driver_name: 'Peter', time_start: '12PM', time_end: '7PM' }, { date: '2010-06-04', bus_name: 'Thomas #4', driver_name: 'Eddie', time_start: '11AM', time_end: '6PM' }, { date: " ", bus_name: 'Thomas #5', driver_name: 'Raul', time_start: '4AM', time_end: '1PM' }, { date: '2014-04-03', bus_name: 'Thomas #6', driver_name: 'Jessie', time_start: '5AM', time_end: '2PM' }],
result = array
.filter(o => o.date !== ' ')
.map(({ date, bus_name }) => ({ date, bus_name }))
.sort((a, b) => a.date.localeCompare(b.date));
console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }