簡體   English   中英

ES6:如何僅在該屬性存在時有條件地將屬性(其本身是一個對象)添加到 object

[英]ES6: How can you add a property (which itself is an object) to an object conditionally only if that property exists

我正在關注這個很棒的教程,根據條件向 object 添加(或不添加)屬性。

例如:

{  id: 'some-id',  ...(true && { optionalField: 'something'})}

但就我而言,我有一個 object,它看起來像這樣:

在此處輸入圖像描述

我想做的是如果12-AM屬性存在,不要覆蓋它,添加到它的屬性中,這是一個名為message的鍵,它是一個數組

如果它沒有添加新的時間密鑰,即1230-AMApril-9-2020

這就是我現在所擁有的:

{
  ...dayInfoInChild,
  [currentDate]: { /* April-9-2020 */
    [timeOfDayAndHour]: { /* 12-AM */
      message: textValueContainer, ['foo']
    },
  },
}

但可惜它沒有添加它覆蓋......

任何幫助,將不勝感激。

不要為此使用 object 文字語法。 Object 文字適用於您要創建新的 object 時。 相反,操作 object:

// Checking existence:
if (obj[currentDate] && obj[currentDate][timeOfDayAndHour]) {
    console.log('exist');
}

// Checking if message exist:
if (obj[currentDate][timeOfDayAndHour].message) {
    console.log('exist');
}

// Adding message array:
obj[currentDate][timeOfDayAndHour].message = [];

// Adding message array with message:
obj[currentDate][timeOfDayAndHour].message = ['foo'];

// Adding message:
obj[currentDate][timeOfDayAndHour].message.push('foo');

現在,使用上面的操作,您可以實現您的邏輯。 我不知道您的確切邏輯是什么,但我們可以演示一種實現。 以下是僅在日期存在時如何添加消息的示例,但如果時間或消息數組存在則無關緊要(它將自動創建它們):

function addMessageToDateAutoCreateEverythingElse (obj, date, time, txt) {
  let dateObj = obj[date]

  // Checking date exist:
  if (dateObj) {
    let timeObj = dateObj[time];

    // Auto-create time if not exist
    if (!timeObj) {
      timeObj = {};
      dateObj[time] = timeObj;
    }

    // Auto-create message array if not exist
    if (!timeObj.message) {
      timeObj.message = [];
    }

    // Add new message
    timeObj.message.push(txt);
  }
}  

這只是一個邏輯流程。 您可以實現任何您喜歡的邏輯,將任何內容添加到任何 object。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM