无法设置未定义的属性'01'(Cannot set property '01' of undefined)

我有这个代码:

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 ,代码运行没有问题。

I have this code:

var _ = require('underscore'); var myObj = [ {'name': 'Mike', 'number' : 'b1' , 'level' : 0 }, {'name': 'Tom', 'number' : 'b2' , 'level' : 0 } ]; var result = _.map(myObj, _.invert);

Now, the result is:

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

Ok, until here.

Then, I am adding to the result some parts and trying to fill them:

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

but I am receiving :

TypeError: Cannot set property '01' of undefined

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

Just note ,that if I don't use the invert , code runs without problems.

最满意答案

您可能想要更改此内容:

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

You might want to change this:

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

To this:

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); }); });无法设置未定义的属性'01'(Cannot set property '01' of undefined)

我有这个代码:

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 ,代码运行没有问题。

I have this code:

var _ = require('underscore'); var myObj = [ {'name': 'Mike', 'number' : 'b1' , 'level' : 0 }, {'name': 'Tom', 'number' : 'b2' , 'level' : 0 } ]; var result = _.map(myObj, _.invert);

Now, the result is:

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

Ok, until here.

Then, I am adding to the result some parts and trying to fill them:

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

but I am receiving :

TypeError: Cannot set property '01' of undefined

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

Just note ,that if I don't use the invert , code runs without problems.

最满意答案

您可能想要更改此内容:

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

You might want to change this:

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

To this:

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