Как сохранить определенные свойства на объекте? - PullRequest
0 голосов
/ 10 февраля 2019

У меня есть этот объект.Если значение свойства равно null , я удаляю это свойство.Но у меня есть некоторые специальные свойства, которые я хочу сохранить независимо от того, что (даже если их значения равны нулю).Пока мой код работает отлично, но мне не нравится тот факт, что мне приходится снова и снова использовать оператор OR || .Пример:

key === 'alwaysCountWithMe' ||ключ === 'ABC' ||ключ === 'doNotDeleteMe' ||ключ === 'specialProperty'

Вот мой код:

var object = {
  "firstname": null,
  "lastname": "White",
  "ABC": null,
  "hobby": null,
  "c": 3,
  "alwaysCountWithMe": null,
  "doNotDeleteMe": null,
  "specialProperty": null,
};

console.log(_.pickBy(object, (value, key) => !!value || key === 'alwaysCountWithMe' || key === 'ABC' || key === 'doNotDeleteMe' || key === 'specialProperty'));
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.11/lodash.min.js"></script>

Есть ли более чистый способ сделать это без необходимости использовать || снова и снова?.

Ответы [ 4 ]

0 голосов
/ 10 февраля 2019

Одним из решений является сохранение ключей на наборе .

var object = {
  "firstname": null,
  "lastname": "White",
  "ABC": null,
  "hobby": null,
  "c": 3,
  "alwaysCountWithMe": null,
  "doNotDeleteMe": null,
  "specialProperty": null,
};

const keysSet = new Set(['alwaysCountWithMe', 'ABC', 'doNotDeleteMe', 'specialProperty']);

console.log(_.pickBy(object, (value, key) => !!value || keysSet.has(key)));
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.11/lodash.min.js"></script>
0 голосов
/ 10 февраля 2019

Используйте массив ключей, чтобы всегда сохранять, и проверьте, если это includes(key):

var object = {
  "firstname": null,
  "lastname": "White",
  "ABC": null,
  "hobby": null,
  "c": 3,
  "alwaysCountWithMe": null,
  "doNotDeleteMe": null,
  "specialProperty": null,
};
const alwaysKeep = ['alwaysCountWithMe', 'ABC', 'doNotDeleteMe', 'specialProperty'];

console.log(_.pickBy(object, (value, key) => !!value || alwaysKeep.includes(key)));
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.11/lodash.min.js"></script>
0 голосов
/ 10 февраля 2019

Я буду хранить alwaysKeep как Object, и тогда мне не нужно будет проходить через него каждый раз, когда объект JS использует хэши, чтобы я мог получить доступ с O(1) сложностью времени

var object = {"firstname": null,"lastname": "White","ABC": null,"hobby": null,"c": 3,"alwaysCountWithMe": null,"doNotDeleteMe": null,"specialProperty": null,};

const alwaysKeep = {'alwaysCountWithMe': true, 'ABC': true, 'doNotDeleteMe': true, 'specialProperty':true};

console.log(_.pickBy(object, (value, key) => !!value || alwaysKeep[key]));
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.11/lodash.min.js"></script>
0 голосов
/ 10 февраля 2019

Да, используйте массив и includes:

var object = {
  "firstname": null,
  "lastname": "White",
  "ABC": null,
  "hobby": null,
  "c": 3,
  "alwaysCountWithMe": null,
  "doNotDeleteMe": null,
  "specialProperty": null,
};

console.log(_.pickBy(object, (value, key) => !!value || ['alwaysCountWithMe', 'ABC', 'doNotDeleteMe', 'specialProperty'].includes(key)));
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.11/lodash.min.js"></script>
...