对象不是vuejs中的可扩展错误

ank*_*pta 3 javascript vue.js vuex

我想用名为colspan的新字段更新促销对象.但是我的运气不好

错误:

未承诺(在promise中)TypeError:无法添加属性colspan,对象在eval(eval at(http:// localhost:8080/app.js:3160:1),:71:32)处无法在Array.forEach(原生地)进行扩展)eval(eval at(http:// localhost:8080/app.js:3160:1),:66:35)在eval的Array.forEach(native)(eval at(http:// localhost:8080 /) app.js:3160:1),:64:47)在eval上的Array.forEach(native)(eval at(http:// localhost:8080/app.js:3160:1),:62:23 )at at在F(Eval at(http:// localhost:8080/app.js:865:1),:35:28)的Promise()at Object.modifyData(eval at(http:// localhost:8080/app.js) :3160:1),: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]
            // // }
            // }
          })
        })
Run Code Online (Sandbox Code Playgroud)

请帮我解决这个问题.

Roy*_*y J 6

该对象promo通过Object.preventExtensions(或sealfreeze)关闭了可扩展性.这意味着您无法向其添加新属性.相反,您可以使用新属性创建它的新副本.一个方便的方法是使用Object.assign.

let tmpPromo = Object.assign({colspan: 0}, promo);
Run Code Online (Sandbox Code Playgroud)

这从定义的匿名对象开始,将colspan属性复制promo到其中,然后返回对象(我们分配给它tmpPromo).