我有一个像这样的对象数组:
[
{id: 'id1', random: 'labels.prop1'},
{id: 'id2', random: 'labels.prop2'},
{id: 'id3', random: 'texts.anotherprop'}
]
是否有一种简短的方法可以从该数组生成基于属性random
的对象?我需要这个:
{
texts: {
anotherprop: ''
},
labels: {
prop1: '',
prop2: ''
}
}
答案 0 :(得分:1)
您可以迭代数组并根据random
的部分构建对象。
function setValue(object, path, value) {
var fullPath = path.split('.'),
way = fullPath.slice(),
last = way.pop();
way.reduce(function (r, a) {
return r[a] = r[a] || {};
}, object)[last] = value;
}
var data = [{ id: 'id1', random: 'labels.prop1' }, { id: 'id2', random: 'labels.prop2' }, { id: 'id3', random: 'texts.anotherprop' }],
result = {};
data.forEach(function (o) {
setValue(result, o.random, '');
});
console.log(result);
答案 1 :(得分:1)
您可以使用reduce()
两次来构建此嵌套对象。
var data = [
{id: 'id1', random: 'labels.prop1'},
{id: 'id2', random: 'labels.prop2'},
{id: 'id3', random: 'texts.anotherprop'}
]
var result = data.reduce(function(r, o) {
var arr = o.random.split('.')
arr.reduce(function(a, b, i) {
return (i != arr.length - 1) ? a[b] || (a[b] = {}) : a[b] = ''
}, r)
return r;
}, {})
console.log(result)
答案 2 :(得分:0)
var arr = [
{id: 'id1', random: 'labels.prop1'},
{id: 'id2', random: 'labels.prop2'},
{id: 'id3', random: 'texts.anotherprop'}
];
var result = {};
arr.forEach(function(o) {
var parts = o.random.split('.');
var r = result;
var i = 0;
for( ; i < parts.length - 1; i++) {
r[parts[i]] = r[parts[i]] || {};
r = r[parts[i]];
}
r[parts[i]] = '';
});
console.log(result);
&#13;