第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

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

在 reduce 中設置對象中一個特定鍵的屬性是為所有屬性設置它

在 reduce 中設置對象中一個特定鍵的屬性是為所有屬性設置它

UYOU 2023-06-15 17:38:08
好吧,我真的不知道這里發(fā)生了什么。我假設它是某種參考問題?但我不知道如何解決它或導致它的原因。總而言之,我有一個對象列表,以及一個預先填充的對象,以確保我擁有該對象中所有鍵的數(shù)據(jù)。我需要遍歷這個對象列表,并通過使用元數(shù)據(jù)對象中的 timeframeId 和數(shù)據(jù)對象中的 id,我想將整個數(shù)據(jù)對象分配給預填充對象中相應的 timeframeId 和 id 層次結構。出于某種原因,所有data屬性都被覆蓋到最后一行data。但是我的代碼如下:const buildSegmentsFromRows = (rows, timeframeMetadata, defaultSegmentData) => {? // Prepopulate object to make sure every timeframe has a 'hello' key in it with some data? const emptySegments = timeframeMetadata.reduce((segmentMap, metadata) => {? ? segmentMap[metadata.timeframeId] = {? ? ? metadata,? ? ? segments: defaultSegmentData,? ? };? ? return segmentMap;? }, {});? // Now simply just loop over the rows, and set [row.metadata.timeframeId].segments[row.data.id] to row.data? const segments = rows.reduce((partialSegments, row) => {? ? const { timeframeId } = row.metadata;? ? const { id } = row.data;? ? /**? ? ?* This is the line where everything goes wrong? ? ?*/? ? partialSegments[timeframeId].segments[id] = row.data;? ? return partialSegments;? }, emptySegments);? return segments;};const rows = [? {? ? metadata: { timeframeId: '20202_01' },? ? data: {? ? ? 'id': 'hello', 'value': 15? ? }? },? {? ? metadata: { timeframeId: '20202_02' },? ? data: {? ? ? 'id': 'hello', 'value': 10? ? }? }]const timeframemetadata = [? { timeframeId: '20202_01'},? { timeframeId: '20202_02'}]const defaultSegmentData = {? 'hello': {? ? 'id': 'hello',? }}console.log(JSON.stringify(buildSegmentsFromRows(rows, timeframemetadata, defaultSegmentData), null, 2))但是相反,在所有情況下value都設置為。10我在想這是因為我們將屬性設置為row.data,這是一個參考,并且在每次調用時都會更新?但我在這里完全不知所措。
查看完整描述

1 回答

?
素胚勾勒不出你

TA貢獻1827條經驗 獲得超9個贊

問題是您指的是segments列表中的每個對象都是同一個對象。


因此,更改 的值segments[id]將更新defaultSegmentData,導致對的每個引用defaultSegmentData也發(fā)生變化。


  const emptySegments = timeframeMetadata.reduce((segmentMap, metadata) => {

    segmentMap[metadata.timeframeId] = {

      metadata,

      segments: defaultSegmentData, // Everything goes wrong here.

    };

    return segmentMap;

  }, {});

此問題的一個簡單解決方案是避免在創(chuàng)建時使用對對象的相同引用segmentMap:


  const emptySegments = timeframeMetadata.reduce((segmentMap, metadata) => {

    segmentMap[metadata.timeframeId] = {

      metadata,

      /** Or whatever default value you want. 

      *   Just make sure to create a new instance of it for each call.

      */

      segments: {},

    };

    return segmentMap;

  }, {});


查看完整回答
反對 回復 2023-06-15
  • 1 回答
  • 0 關注
  • 147 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

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

公眾號

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