фильтрация объекта и изменение свойств - PullRequest
1 голос
/ 10 марта 2020

У меня новый вопрос ie, и я пытался читать руководства снова и снова и не могу понять это.

поэтому у меня есть этот код:

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», а затем изменить существующие свойства остальных продуктов со свойствами из «data» .

Однако этот код не позволяет мне его запустить. У кого-нибудь есть идеи?

ОБНОВЛЕНИЕ: только что решил, объединив оба объекта

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

Ответы [ 2 ]

1 голос
/ 10 марта 2020

У вас недействительный 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);
  };
}

0 голосов
/ 10 марта 2020

Если я правильно понимаю, вы хотите получить один объект, который:

  • исключает все объекты-значения products, где поле Artikelgrupp не соответствует data.Artikelgrupp и,
  • указанные c поля Beskrivning, kategori, et c из вашего 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     
    }
  };

}, {})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...