无法设置undefined的属性'01'

时间:2016-06-11 18:42:15

标签: javascript

我有这段代码:

var _ = require('underscore');

var myObj = [

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

var result = _.map(myObj, _.invert);

现在,结果是:

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

好的,直到这里。

然后,我将结果添加到某些部分并尝试填充它们:

result = result,
    parts = {'levels': {}, 'names': {}, 'numbers': {}};

result.forEach(function(obj,i){

    Object.keys(obj).forEach(function(k) { 

        parts[k +"s"][k +(i+1)] = obj[k];
    });
});

但我收到了:

TypeError: Cannot set property '01' of undefined

parts[k +"s"][k +(i+1)] = obj[k];

请注意,如果我不使用invert,代码运行没有问题。

1 个答案:

答案 0 :(得分:1)

您可能想要更改此内容:

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

对此:

result.forEach(function(obj, i){
    Object.keys(obj).forEach(function(k) { 
        let box = parts[obj[k] + 's'][k];
        if(box) {
            if(Array.isArray(box)) {
                box.push(obj[k] + (i + 1));
            } else {
                parts[obj[k] + 's'][k] = [box, parts[obj[k] + 's'][k].slice(0, -1) + (i + 1)];
            }
            return;
        }

        parts[obj[k] + 's'][k] = obj[k] + (i + 1);
    });
});