Javascript: соответствующий шаблон свойств объекта или префикс - PullRequest
0 голосов
/ 22 марта 2020
const obj = {
  obj_abc: '',
  obj_def: '',
  hello_123: '',
  hello_456: ''
}

Если у меня есть объект, у которого его свойство имеет определенный префикс, как я могу разделить его на несколько массивов?

как

const arr1 = [{
  obj_abc: '',
  obj_def: ''
}]

const arr2 = [{
  hello_123: '',
  hello_456: ''
}]

Я не мог думать способа, которым я могу частично соответствовать свойствам объекта.

Ответы [ 3 ]

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

Моя версия с использованием Object.keys

const obj = {
  obj_abc: 1,
  obj_def: 2,
  hello_123: 3,
  hello_456: 4,
}
const arr1 = [];
const arr2 = [];

Object.keys(obj).forEach(key => {
  if (key.match(/hello_.*/)) {
    arr1.push({
      [key]: obj[key]
    });
  } else {
    arr2.push({
      [key]: obj[key]
    });
  }
});
console.log(arr1, arr2);
0 голосов
/ 22 марта 2020

Самый простой ответ, используя простой javascript

const a = {
  obj_abc:123,
  obj_def:456,
  hello_123: 123,
  hello_456:456
};

const b = {};

for(k in a){
    const [key] = k.split('_');
    if(!b[key]) {
      b[key] = [];
    }
    b[key].push(a[k]);
}

console.log(b);
0 голосов
/ 22 марта 2020

Вы можете использовать метод reduce для Object.entries и вернуть один объект с отдельными свойствами для каждого подобного ключа. Предполагается, что вы хотите сопоставить часть ключа до _

const obj = {
  obj_abc: true,
  obj_def: true,
  hello_123: true,
  hello_456: true
}

const result = Object.entries(obj).reduce((r, [k, v]) => {
  const [key] = k.split('_');
  if (!r[key]) r[key] = {}
  r[key][k] = v
  return r;
}, {})

const [r1, r2] = Object.values(result)

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