2016-06-11 64 views
0

如果我有这样的对象:对象分成三个部分

var myObj = [ 

    {'name': 'Mike', 'number' : 'b1' , 'level' : 0 }, 
    {'name': 'Tom', 'number' : 'b2' , 'level' : 0 } 
]; 

如何创建三个独立的对象,如:

"names" : 
{ 
    'name1' : 'Mike', 
    'name2' : 'Tom', 
..} 

"numbers" : 
{ 
    'number1' : 'b1', 
    'number2' : 'b2', 
..} 

"levels" : 
{ 
    'level1' : '0', 
    'level2' : '0', 
... 
} 
+0

相同的属性多次,只有最后一个将生存:D ...'{'name':'Mike','name':'Tom'}'=>'{name:'Tom'}' –

+0

Well keys在一个js对象中需要是唯一的,所以当名称,数字7级别具有与可能不具有有效对象的属性相同的关键字时。你可以看看 http://stackoverflow.com/questions/3996135/js-associative-array-with-duplicate-names http://stackoverflow.com/questions/17063257/necessity-for-duplicate- keys-in-json-object – brk

回答

1

使用Object.keys功能,ES6箭头函数表达式和预定义parts对象的替代解决方案:

var myObj = [{'name': 'Mike', 'number': 'b1', 'level': 0},{'name': 'Tom', 'number': 'b2', 'level': 0}], 
    parts = {'names': {}, 'numbers': {}, 'levels': {}}; 

myObj.forEach(function(obj, i){ 
    Object.keys(obj).forEach((k) => (parts[k +"s"][k +(i+1)] = obj[k])); 
}); 

console.log(JSON.stringify(parts, 0, 4)); 

输出:

{ 
    "names": { 
     "name1": "Mike", 
     "name2": "Tom" 
    }, 
    "numbers": { 
     "number1": "b1", 
     "number2": "b2" 
    }, 
    "levels": { 
     "level1": 0, 
     "level2": 0 
    } 
} 
+0

:您好,我打开[this](http://stackoverflow.com/questions/37989760/remove-keys-that-start-with-specific-letter),如果您有兴趣,谢谢! – George

+0

@George,你好,有一个用户@ gurvinder372的回答。它对你有帮助吗? – RomanPerekhrest

+0

:嗨,你比你更感兴趣。我看到他更新了。现在,只有一个问题仍然是从结果中删除括号。如果他回答,我没事。谢谢! – George

1

您可以使用键的数量元素迭代作为属性。

var myObj = [{ 'name': 'Mike', 'number': 'b1', 'level': 0 }, { 'name': 'Tom', 'number': 'b2', 'level': 0 }], 
 
    result = {}; 
 

 
myObj.forEach(function (a, i) { 
 
    Object.keys(a).forEach(function (k) { 
 
     result[k + 's'] = result[k + 's'] || {}; 
 
     result[k + 's'][k + (i + 1)] = a[k]; 
 
    }); 
 
}); 
 

 
console.log(result);

+0

:谢谢!我选择了其他答案,因为它更灵活。例如,我可以使用'obj.numbers'。 (upvoted) – George

0

键在JS objects必须是unique

后续声明name : Tom会覆盖您之前的声明。

代码:

var newObj = {}; 
newObj.names = {}; 
newObj.numbers = {}; 
newObj.levels = {}; 

for (var i in myObj) { 
newObj.names.name = myObj[i].name; 
newObj.numbers.number = myObj[i].number; 
newObj.levels.level = myObj[i].level; 
} 

console.log(newObj); 

演示小提琴:https://jsfiddle.net/29pb33dj/

更新的答案与正确的索引键:

var newObj = {}; 
newObj.names = {}; 
newObj.numbers = {}; 
newObj.levels = {}; 

for (var i in myObj) { 
newObj.names[i] = myObj[i].name; 
newObj.numbers[i] = myObj[i].number; 
newObj.levels[i] = myObj[i].level; 
} 

console.log(newObj); 

工作演示:https://jsfiddle.net/29pb33dj/1/