Из объекта извлеките свойства с именами, соответствующими тесту - PullRequest
2 голосов
/ 27 февраля 2020

У меня есть объект props, который будет содержать неизвестный набор свойств, некоторые из которых я хочу извлечь на основе их префикса. У меня есть кое-что, что работает (отлично!), Но это кажется скучным, и я хочу знать, есть ли более идиоматический c способ сделать это?

const props = {
  bingo: 1,
  bongo: 2,
  mingo: 3,
  bango: 4
}
const bFields = {}
Object.keys(props).filter(k => (k.startsWith('b'))).forEach(k => (
  bFields[k] = props[k]
))

console.log(props)
console.log(bFields)

Ответы [ 4 ]

1 голос
/ 27 февраля 2020

Вы также можете использовать Object.fromEntries, Object.entries

const props = {"bingo":1,"bongo":2,"mingo":3,"bango":4}
const bFields = Object.fromEntries(Object.entries(props).filter(([k])=>k.toLowerCase().startsWith('b')))
console.log(bFields)
1 голос
/ 27 февраля 2020

Вы также можете использовать уменьшить :

const props = {
  bingo: 1,
  bongo: 2,
  mingo: 3,
  bango: 4
}
const bFields = Object.keys(props).reduce((acc, prop) => {
  if (prop.startsWith('b')) {
    acc[prop] = props[prop]
  }

  return acc
}, {})

console.log(props);
console.log(bFields);
1 голос
/ 27 февраля 2020

Как насчет однострочник

let props = {bingo:1,bongo:2,mingo:3,bango:4}, filteredProps = {};
Object.keys(props).filter(x => x.startsWith('b') ? filteredProps[x] = props[x] : '');

console.log(filteredProps);
0 голосов
/ 27 февраля 2020

Я сделал это с целью «Понятнее того, кто не кодирует». Не знаю, так ли это, но вот код.

const props = {
  bingo: 1,
  bongo: 2,
  mingo: 3,
  bango: 4
}
const bFields = {};
function matchByStart (key, idx, all) {
  if (key.toLowerCase().startsWith("b")) bFields[key] = props[key];
}
Object.keys(props).map(matchByStart);
console.log(bFields);

Надеюсь, это поможет!

edit: Also I put the method toLowerCase()!

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