Javascript:匹配对象属性模式或前缀

时间:2020-03-22 16:36:49

标签: javascript ecmascript-6

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

如果我有一个对象,该对象的属性具有一定的前缀模式,如何将它们分成多个数组?

喜欢

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

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

我想不出一种可以部分匹配对象属性的方法。

3 个答案:

答案 0 :(得分:0)

您可以在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)

答案 1 :(得分:0)

我使用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);

答案 2 :(得分:0)

使用普通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);