const obj = {
obj_abc: '',
obj_def: '',
hello_123: '',
hello_456: ''
}
如果我有一个对象,该对象的属性具有一定的前缀模式,如何将它们分成多个数组?
喜欢
const arr1 = [{
obj_abc: '',
obj_def: ''
}]
const arr2 = [{
hello_123: '',
hello_456: ''
}]
我想不出一种可以部分匹配对象属性的方法。
答案 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);