簡體   English   中英

過濾對象並修改屬性

[英]filtering object and modify properties

我有一個新手問題,我試圖一遍又一遍地閱讀手冊,但無法弄清楚。

所以我有這個代碼:

export function editSerier(data, products) {
    return (dispatch) => {

        const filteredProducts = Object.assign(
            ...Object.keys(products)
                .filter(key => products[key].Artikelgrupp === data.Artikelgrupp)
                .map(k => ({ 
                    [k]: products[k]:{
                    Beskrivning: data.Beskrivning,
                    kategori: data.kategori,
                    status: data.status,
                    synas: data.synas,
                    tillverkare: data.tillverkare,
                    titel: data.titel}
                })

            })



        console.log(filteredProducts)
    }
}

我想通過“Artikelgrupp”過濾傳入的對象產品,然后使用“數據”中的屬性修改剩余產品的現有屬性。

但是這段代碼不允許我運行它。 有人有什么想法嗎?

更新:剛剛通過合並兩個對象來解決它

const filteredProducts = Object.assign(
            ...Object.keys(products)
                .filter(key => products[key].Artikelgrupp === data.Artikelgrupp)
                .map(k => ({ 
                    [k]: {...products[k], ...data}
                }))
        )

您的 JavaScript 無效。 如果你想要一個嵌套對象,你需要{ something: { } } ,如果你想使用計算屬性名稱,你需要用[]將它括起來。

所以,這會起作用

export function editSerier(data, products) {
  return dispatch => {
    const filteredProducts = Object.assign(
      ...Object.keys(products)
        .filter(key => products[key].Artikelgrupp === data.Artikelgrupp)
        .map(k => ({
          [k]: {
            [products[k]]: {
              Beskrivning: data.Beskrivning,
              kategori: data.kategori,
              status: data.status,
              synas: data.synas,
              tillverkare: data.tillverkare,
              titel: data.titel
            }
          }
        }))
    );

    console.log(filteredProducts);
  };
}

如果我理解正確,您想獲得一個單一的對象:

  • 排除Artikelgrupp字段與數據不匹配的products所有值對象data.Artikelgrupp和,
  • 特定的字段Beskrivningkategori等,從data對象被合並/復制到所產生的對象的乘積值

對此的一種解決方案是

/* Extract entry key/value pairs from products object */
Object.entries(products)
/* Reduce entry pairs to required object shape */
.reduce((result, [key, value]) => {

  /* Substitute for prior filter step. Avoid overhead of array copy
  between prior filter and this reduction. */
  if(value.Artikelgrupp !== data.Artikelgrupp) {
    return result;
  }

  /* Update result object, "upserting" fields of data object into 
  existing product value, for this reduce iteration */
  return {
    ...result,
    [ key ] : {
        ...value,
        Beskrivning: data.Beskrivning,
        kategori: data.kategori,
        status: data.status,
        synas: data.synas,
        tillverkare: data.tillverkare,
        titel: data.titel     
    }
  };

}, {})

暫無
暫無

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

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