2016-02-10 4 views
-2

Я пытаюсь перезаписать profileData.timeline[i].text в функции ниже, но он не работает. Может ли кто-нибудь сказать мне, почему это так?Невозможно перезаписать значение в объекте JavaScript

var profileData = [ 
    { 
     id: 1, 
     firstName: 'Philip', 
     lastName: 'Yemofio', 
     email: '[email protected]', 
     address: "2985 Grant Avenue Old Bridge, NJ 08857", 
     card: [ 
      { 
       number: 'xxxx-0143', 
       cvc: '117', 
       expiryMonth: '02', 
       expiryYear: '2019', 
       type: 'Visa' 
      }, 
      { 
       number: 'xxxx-7284', 
       cvc: '349', 
       expiryMonth: '07', 
       expiryYear: '2020', 
       type: 'Visa' 
      }, 
      { 
       number: 'xxxx-1627', 
       cvc: '755', 
       expiryMonth: '10', 
       expiryYear: '2019', 
       type: 'Mastercard' 
      } 
     ], 
     reputation: 3119, 
     gold: 23, 
     silver: 76, 
     bronze: 132, 
     timeline: [ 
      { 
       type: 'favourite', 
       business: 1, 
       timestamp: 1455104648, 
       text: '', 
      }, 
      { 
       type: 'favourite', 
       business: 3, 
       timestamp: 1454661898, 
       text: '', 
      }, 
      { 
       type: 'badge', 
       detail: 'silver', 
       timestamp: 1454593008, 
       text: '', 
      }, 
      { 
       type: 'badge', 
       detail: 'bronze', 
       timestamp: 1454271576, 
       text: '', 
      } 
     ] 
    } 
]; 

    getSelectedProfile: function(profileId) { 
     var profileId = parseInt(profileId); 
     for (var i = 0; i < profileData.length; i++) { 
     var profile = profileData[i]; 
     if (profile.id === profileId) { 

      if (profile.timeline.type === "favourite") { 
      profile.timeline.text = profile.firstName + " has added " + " to his favourites." 
      } 

      console.log(profile.timeline) 
      return profile; 
     } 
     } 
    } 
+1

'timeline' не' Text'. Это массив объектов, которые имеют «текст». В вашем вопросе вы говорите, что пытаетесь переписать 'profleData.timeline [i] .text', но в вашем коде вы говорите' profileData.timeline.text'. –

+0

Являются ли объект и функция фактически рядом друг с другом, как показано в блоке кода? Потому что это даст синтаксическую ошибку ... – Xufox

+0

Ах имеет смысл. Итак, мне нужно пройти через массив, чтобы перезаписать значения? – methuselah

ответ

2

проблема с этим кодом

if (profile.timeline.type === "favourite") { 
     profile.timeline.text = profile.firstName + " has added " + " to his favourites." 
     } 

profile.timeline является массивом, он не имеет text или type собственность.

Вам нужно перебрать этот массив и проверить значение

profile.timeline.forEach (function(value){ 

     if (value.type === "favourite") { 
     value.text = profile.firstName + " has added " + " to his favourites." 
     } 

}); 
Смежные вопросы