ES6 распространяет синтаксис: автоматически пропускать пустые ключи? - PullRequest
1 голос
/ 09 октября 2019

Каков более простой шаблон, чтобы избежать обновления входных данных, если один из ключей пуст в полезной нагрузке? Есть хороший синтаксис ES6?

const master = {
    inputs: {a: [], b: [], c: []}
};

const {a, b, c} = payload;

const updateMaster = (payload) => ({
    ...master, inputs: {...master.inputs, ...payload}
});

Ответы [ 2 ]

2 голосов
/ 09 октября 2019

Чтобы отфильтровать поля объекта, используйте Object.entries для извлечения полей, Array.prototype.filter для фильтрации и Object.formEntries для восстановления объекта из отфильтрованных записей.

let payload = {
  a: [],
  b: [1, 2]
};

let nonEmptyPayload = Object.fromEntries(Object.entries(payload).filter(([_, v]) => v.length))

console.log(nonEmptyPayload);

Применяя это к вашему примеру,

let master = {
  inputs: {
    a: [],
    b: [13, 14],
    c: [10, 12]
  }
};

let trimObj = obj => Object.fromEntries(Object.entries(obj).filter(([_, v]) => v.length));

let updateMaster = payload => ({
  ...master,
  inputs: { ...master.inputs,
    ...trimObj(payload)
  }
});

updateMaster({
  b: [15, 16], // Will override master.c
  c: []        // Will not override master.c
});

console.log(master);
2 голосов
/ 09 октября 2019

Вы можете создать такую ​​функцию. Он удаляет все пустые значения из объекта, без непосредственного изменения объекта, переданного в функцию.

const removeEmpty = obj => {
  return Object.keys(obj).reduce((acc, key) => {
    // value is "falsey" or is empty array
    return !obj[key] || (Array.isArray(obj[key]) && !obj[key].length)
      ? acc
      : {...acc, [key]: obj[key]}
  }, {})
}

console.log(removeEmpty({a: 'AAA', b: '', c: 'CCC', d: false, e: null, f: [1,2], g: []}))

Итак, ваш последний фрагмент будет выглядеть так:

const updateMaster = (payload) => ({
    ...master, inputs: {...master.inputs, ...removeEmpty(payload)}
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...