2017-05-11 17 views
2

私はcolspanという新しいフィールドでプロモーションオブジェクトを更新したいと考えています。しかし、私の不運その取得オブジェクトが拡張可能なエラーではありません

エラー:配列の

キャッチされない(約束で)はTypeError:プロパティはcolspanを追加することはできません、オブジェクトはevalので 拡張可能ではありません(32)http://localhost:8080/app.js:3160:1(でのeval::71)ネイティブArray.forEachで (評価で (ネイティブ).forEach(http://localhost:8080/app.js:3160:1(にて評価):66:35)で評価 (ネイティブ)Array.forEachで (47(http://localhost:8080/app.js:3160:1)で評価:64) ) eval(eval at(http://localhost:8080/app.js:3160:1)、:62:23) at Promise() at F(eval aトン(​​)、:35:28)Object.modifyDataで (http://localhost:8080/app.js:3160:1(でのeval):48:12)

departmentIds.forEach(departmentId => { 
      results[departmentId] = [] 
      departmentWiseResults[departmentId].forEach((promo, index) => { 
      let tmpPromo = promo 
      dateRanges.dateRanges.forEach(range => { 
       let startedDateWeek = moment(promo.startDate).week() 
       let endDateWeek = moment(promo.endDate).week() 
       let startedYear = moment(promo.startDate).year() 
       let endedYear = moment(promo.endDate).year() 
       tmpPromo.colspan = 0 
       if (range.startYear === startedYear && range.endYear === endedYear && range.weekNumber <= endDateWeek && range.weekNumber >= startedDateWeek) { 
       tmpPromo.colspan++ 
       } 
       departmentWiseResults[departmentId].splice(index, 1, tmpPromo) 
       console.log('stareted:', startedDateWeek, endDateWeek, startedYear, endedYear, promo, tmpPromo, departmentWiseResults[departmentId]) 
      }) 
      console.log('promo after adding colspna:', promo) 
      // if (isInRange(range, promo)) { 
      // console.log('for range', range.startDate, range.endDate) 
      // console.log('for promo', promo.id) 
      // console.log(
      //  'diff is', 
      //  findWeekspan(range, dateRanges.dateRanges[dateRanges.dateRanges.length - 1], promo) 
      // ) 
      // // if (!promo.used) { 
      // // promo.used = true 
      // // results[departmentId] 
      // // } 
      // } 
      }) 
     }) 

この問題を解決する方法を、私を助けてください。

+0

'let tmpPromo = Object.assign({colspan:0}、promo)'? –

+0

ありがとう、ロット@RoyJ –

答えて

5

オブジェクトpromoは、Object.preventExtensions(または)によって拡張性がオフになっています。つまり、新しいプロパティを追加することはできません。代わりに、新しいプロパティで新しいコピーを作成することができます。これを行う便利な方法はObject.assignです。

let tmpPromo = Object.assign({colspan: 0}, promo); 

これは、colspanを定義する匿名オブジェクトで始まるpromoからそれにコピー特性、及びその後(我々はtmpPromoに割り当てる)オブジェクトを返します。

関連する問題