无法分配给javascript对象数组

时间:2013-12-16 19:47:16

标签: javascript node.js

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

    }

3 个答案:

答案 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.comMongoose Documentation

希望这会有所帮助。