【问题标题】:separate an object into three parts把一个物体分成三部分
【发布时间】:2016-06-11 08:05:14
【问题描述】:

如果我有这样的对象:

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',
...
}

【问题讨论】:

标签: javascript


【解决方案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
    }
}

【讨论】:

  • :您好,我打开this,如果您有兴趣,谢谢!
  • @George,你好,有来自用户@gurvinder372 的回答。对你有帮助吗?
  • :您好,非常感谢您的关注。我看到他更新了。现在,唯一的问题是从结果中删除括号。如果他回答,我很好。谢谢!
【解决方案2】:

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

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);

【讨论】:

  • :谢谢!我选择了另一个答案,因为它更灵活。例如,我可以使用obj.numbers。 (赞成)
【解决方案3】:

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/

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-04-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-06
    • 1970-01-01
    • 1970-01-01
    • 2020-09-21
    相关资源
    最近更新 更多