我在JavaScript JSON对象中有以下代码:
{
apple: 'value',
orange: 'value',
string1Pear: 'value',
string1Banana: 'value',
string2Pear: 'value',
string2Banana: 'value',
pineapple: 'value'
}
我需要对给定对象的类似键进行分组,而不知道是否存在这样或者它们看起来像什么。
最终结果应该是这样的:
{
apple: 'value',
orange: 'value',
string: {
string1: {
string1Pear: 'value',
string1Banana: 'value',
},
string2: {
string2Pear: 'value',
string2Banana: 'value',
},
}
pineapple: 'value'
}
答案 0 :(得分:1)
使用Object.keys(),String.prototype.match()和Array.prototype.reduce()函数的解决方案:
var data = { apple: 'value', orange: 'value', string1Pear: 'value', string1Banana: 'value', string2Pear: 'value', string2Banana: 'value', pineapple: 'value'},
result = Object.keys(data).reduce(function (r, k) {
var parts = k.match(/(\w+\d+)([A-Z]\w+)/);
if (!parts) {
r[k] = data[k];
return r;
}
r[parts[1]] = r[parts[1]] || {};
r[parts[1]][k] = data[k]
return r;
}, {});
console.log(result);

答案 1 :(得分:0)
如果您的密钥是驼峰式的,并且您希望始终按照第一个大写字母之前的任何字符串进行分组,则可以使用:
const fruits = {
apple: 'value',
orange: 'value',
string1Pear: 'value',
string1Banana: 'value',
string2Pear: 'value',
string2Banana: 'value',
pineapple: 'value'
}
// Split by uppercase letters and take the first word.
function getGroup(key) {
return key.split(/(?=[A-Z])/)[0];
}
// Group keys
let newObject = {};
const keys = Object.keys(fruits);
for (var i = 0; i < keys.length; i++) {
const key = keys[i];
const group = getGroup(key);
if (group === key) {
newObject[group] = fruits[key];
}
else if (newObject.hasOwnProperty(group)) {
newObject[group][key] = fruits[key];
}
else {
newObject[group] = {};
newObject[group][key] = fruits[key];
}
}
console.log(newObject);