我有这段代码:
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
,代码运行没有问题。
答案 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);
});
});