2016-06-11 4 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 в объекте js необходимо быть уникальным, поэтому, когда имена, уровни 7 уровней имеют тот же ключ, что и свойство, которое не может иметь действительный объект. Вы можете посмотреть на http://stackoverflow.com/questions/3996135/js-associative-array-with-duplicate-names http://stackoverflow.com/questions/17063257/necessibility-for-duplicate- key-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

: Привет, я открыл [это] (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); 

Demo скрипку: 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/