我在node.js工作,由于某种原因无法分配给一个对象数组。我知道我以前有过这个,但无法弄明白。我认为它必须与变量的局部性有关。该函数需要3个数组。第一个(itemphotolength)是一个数组,其中包含每个项目的照片数量。第二个(fbitemphotos)包含所有项目的连续顺序照片列表。第三个(useritems)是包含项目的对象数组。因此,该函数将fbitemphotos数组添加到itemphotolength中定义的照片数量到useritems(实际项目)中的相应元素。唯一的问题是最重要的任务usersitems[i].photos = itemimages;
无效?!?!?!请帮帮我!?!?!?
这是代码。很高兴知道未来的解决方案。
exports.makeitems = function (itemphotolength, fbitemphotos, usersitems, callback) {
function convert( i, next)
{
var itemimages = new Array();
var x = 0;
while(x < itemphotolength[i])
{
itemimages.push(fbitemphotos.photos[x]);
x++;
console.log('testing x');
console.log(x);
}
console.log('testing itemimages');
console.log(itemimages);
usersitems[i].photos = itemimages;
console.log('testing useritems');
console.log(usersitems);
next();
}
function iterator(i)
{
if(i < usersitems.length) {
convert(i, function(err){
if(err) {
console.log(err);
} else {
iterator(i + 1);
}
});
} else {
callback(usersitems);
}
}
iterator(0);
}
答案 0 :(得分:0)
如下所示,您的代码运行良好:
var itemphotolength = [1],
fbitemphotos = { photos : ['qqq'] },
usersitems = [ { photos : [ ] } ];
makeitems(itemphotolength, fbitemphotos, usersitems,
function (a) { console.log('a:', a); })
答案 1 :(得分:0)
我假设您的对象usersitems
是来自mongoose查询的对象。在mongoose中输出的对象不能直接更改,并且与普通Javascript对象的行为不同。因此,现在快速解决方法是将对象更改为标准的Javascript对象,如此。
exports.makeitems = function (itemphotolength, fbitemphotos, usersitems, callback) {
var useritemscopy = JSON.parse(JSON.stringify(usersitems));
function convert(i, next) {
var itemimages = new Array();
var x = 0;
while(x < itemphotolength[i]) {
itemimages.push(fbitemphotos.photos[x]);
x++;
}
useritemscopy[i].photos = itemimages;
next();
}
function iterator(i) {
if(i < usersitems.length) {
convert(i, function(err){
if(err) {
console.log(err);
} else {
iterator(i + 1);
}
});
} else {
callback(usersitems);
}
}
iterator(0);
}
答案 2 :(得分:0)
如果是猫鼬问题,则可以对从数据库中获取的对象使用.toObject({getters: true, virtuals: true})
。
此处提供更多信息:alexanderzeitler.com和Mongoose Documentation。
希望这会有所帮助。