亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

比較并過濾對象中的日期屬性

比較并過濾對象中的日期屬性

桃花長相依 2023-12-14 17:10:26
我有一個看起來像這樣的對象:    myObject = {      publishedDate: string;      Url: string;      Title: string;  }屬性“publishedDate”是格式為“19/01/2021”的字符串。例如,它可以有一個未來的日期,即大于今天的值。換句話說,我想保留 PublicationDate 等于或小于今天的所有對象(并刪除所有已結束的對象)。對象保存在我的狀態(數組)中:this.state.data我首先為今天的值創建一個日期變量,以便將其與publishedDate 進行比較。我還使用 moment() 將其格式化為與對象相同的日期格式:let today = moment().format("DD/MM/YYYY");然后我使用過濾方法來比較并過濾掉數據:  this.state.data.filter(item => new Date(item.publishedDate) >= new Date(today))而且我也嘗試過:  this.state.data.filter(function(item) {          if (new Date(item.publishedDate) >= new Date(today)) {        return false;      }    return true;  });它不僅不起作用,而且我仍然擁有數組中的所有對象,并且沒有任何內容被過濾掉。代碼有什么問題嗎?
查看完整描述

6 回答

?
阿晨1998

TA貢獻2037條經驗 獲得超6個贊

您可以moment像這樣簡單地使用 的內置比較器

this.state.data.filter(item => moment(item.publishedDate,'DD/MM/YYYY').isSameOrAfter(today))




查看完整回答
反對 回復 2023-12-14
?
米脂

TA貢獻1836條經驗 獲得超3個贊

構造函數Date不會接受您當前使用的格式,但它會識別MM/DD/YYYY格式。此外,filter保留函數返回 true 的元素,因此您應該檢查 是否Date小于或等于當前Date。


const today = new Date;

this.state.data = this.state.data.filter(({publishedDate})=>{

    const [d, m, y] = publishedDate.split("/");

    return new Date(m + "/" + d + "/" + y) <= today;

});


查看完整回答
反對 回復 2023-12-14
?
慕田峪4524236

TA貢獻1875條經驗 獲得超5個贊

使用 moment 的String + Format 初始值設定項和Is Same Or After:

this.state.data.filter(item => moment(item.publishedDate, 'DD/MM/YYYY').isSameOrAfter())


查看完整回答
反對 回復 2023-12-14
?
狐的傳說

TA貢獻1804條經驗 獲得超3個贊

一種可能性是使用輔助函數notAfterToday,它接受一個屬性名稱(在我們的例子中'publishedDate')并返回一個函數,該函數接受具有該屬性名稱的對象并報告該日期是在當前日期之前還是在當前日期。

例如,它通過將 2020 年 12 月 18 日轉換為“20201218”,并使用該字符串進行比較來實現此目的。請注意,這樣做的一個優點是它只調用一次 Date 構造函數,用于初始計算今天的日期。

const data = [{publishedDate: '18/12/2020', Url: 'http://example.com/1', Title: 'abc'}, {publishedDate: '19/01/2021', Url: 'http://example.com/2', Title: 'def'}, {publishedDate: '07/04/2014', Url: 'http://example.com/3', Title: 'ghi'}, {publishedDate: '19/07/2023', Url: 'http://example.com/4', Title: 'jkl'}, {publishedDate: '05/01/1966', Url: 'http://example.com/5', Title: 'mno'}, {publishedDate: '01/07/2041', Url: 'http://example.com/6', Title: 'pqr'}, {publishedDate: '08/05/2061', Url: 'http://example.com/7', Title: 'stu'}, {publishedDate: '10/08/1999', Url: 'http://example.com/8', Title: 'vwx'}]


const notAfterToday = (prop) => {

  const reorg = (date, [d, m, y] = date.split('/')) => y + m + d 

  const today = new Date()

  const compare = today .getFullYear() + 

                  String ((today .getMonth () + 1)) .padStart (2, '0') +

                  String (today .getDate ()) .padStart (2, '0')

  return (d) => compare >= reorg (d [prop])

}


console .log (data .filter (notAfterToday ('publishedDate')))

.as-console-wrapper {max-height: 100% !important; top: 0}


查看完整回答
反對 回復 2023-12-14
?
不負相思意

TA貢獻1777條經驗 獲得超10個贊

在與今天進行比較之前,您必須對日期字符串進行一些微調。你可以試試這個——


const data = [

  {

    publishedDate: "19/01/2021",

    url: '',

    title: 'date1'

  },

  {

    publishedDate: "19/05/2021",

    url: '',

    title: 'date2'

  },

  {

    publishedDate: "13/01/2020",

    url: '',

    title: 'date3'

  },

  {

    publishedDate: "16/09/2009",

    url: '',

    title: 'date4'

  },

];


const parseDate = (dateString) => new Date(...dateString.split('/').reverse());



const result = data.filter(item => parseDate(item.publishedDate) <= new Date());


console.log(result);


查看完整回答
反對 回復 2023-12-14
?
拉莫斯之舞

TA貢獻1820條經驗 獲得超10個贊

將日期存儲為字符串是一種代碼味道。與將它們存儲為 JS 原生日期格式或 Moment.JS 日期對象等替代方案相比,比較、存儲和轉換它們更加困難。


這是一個簡單的示例,說明如果您將對象存儲為日期,您可以如何做到這一點。


請注意,第三個對象已被過濾掉。


const myObject1 = {

  publishedDate: new Date("2019-01-01"), // NEW

  Url: "whatever",

  Title: "sample",

}


const myObject2 = {

  publishedDate: new Date("2020-01-01"), // NEW

  Url: "whatever",

  Title: "sample",

}


const myObject3 = {

  publishedDate: new Date("2099-01-01"), // NEW

  Url: "whatever",

  Title: "sample",

}


const arr = [myObject1, myObject2, myObject3];


const today = new Date();


const filtered = arr.filter((obj) => obj.publishedDate < today);


console.log(filtered);


查看完整回答
反對 回復 2023-12-14
  • 6 回答
  • 0 關注
  • 310 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號