2013-12-16 6 views
-1

Я работаю в node.js и по какой-то причине не могу назначить массив объектов. Я знаю, что у меня было это раньше, но не могу понять. Я думаю, что это должно быть связано как с местностью переменных. Функция принимает 3 массива. Первая (itemphotolength) - это массив, содержащий количество фотографий для каждого элемента. Второй (fbitemphotos) содержит последовательный последовательный список фотографий для всех элементов. Третий (useritems) - это массив объектов, содержащих элементы. Таким образом, функция переходит в массив fbitemphotos, добавляя количество фотографий, определенных в itemphotolength, к соответствующему элементу в useritems (фактический элемент). Единственная проблема - самое важное задание usersitems[i].photos = itemimages; не работает?!?!?! Пожалуйста, помогите мне!?!?!?Невозможно назначить массив объектов javascript

Вот код. Было бы хорошо знать решение для будущего.

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

    } 
+7

В чем проблема? Вы получаете какие-либо ошибки? – Mathletics

+0

Почему я получил -1 lol? В основном (логическая) ошибка im get заключается в том, что присваивание 'usersitems [i] .photos = itemimages;' не назначает – Mantissa

+0

. У вас есть -1, потому что исходная запись вашего вопроса была полностью неясной. Что значит «не назначать»? – Mathletics

ответ

0

Я предполагаю, что ваш объект usersitems является объектом исходя из запроса мангустов. Объекты, выпущенные в мангусте, не могут быть изменены напрямую и не действуют так же, как обычный объект 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); 
} 
0

Ваш код работает достаточно хорошо, когда она вызывается следующим образом:

var itemphotolength = [1], 
    fbitemphotos = { photos : ['qqq'] }, 
    usersitems = [ { photos : [ ] } ]; 
makeitems(itemphotolength, fbitemphotos, usersitems, 
    function (a) { console.log('a:', a); }) 
Смежные вопросы