一些变量没有'在vuejs工作

时间:2016-12-21 00:29:29

标签: javascript vue.js vuejs2

我写了一个函数:

getClassTable () {
  var classNormalData = this.classData.normal,
      alterClasses = this.classData.alter.classes,
      classTable = [];

  for(var day in classNormalData) {
    classTable.push(classNormalData[day]);
  }

  if(alterClasses != []) {
    alterClasses.forEach(function(item, index) {
      var date = item.time,
          lesson = item.lesson;
      for(var i = 0; i < 4; i++){
        var time = this.dates[i],
            classes = classTable[i][lesson];
        if(time == date) {
          classes.subject = item.subject;
          break;
        }
      }
    }, this)
  }
  this.classTable = classTable;
}

}

但是当classes.subject = item.subject有效时,有些事情出错了。它似乎直接改变了this.classData。变量classNormalData classTable没有&#39;工作得很好。 为什么呢?

Ps:this.classData在这里定义

computed: {
  classData () {
    return this.$localStorage.get('classList');
  },
}

1 个答案:

答案 0 :(得分:0)

在javascript中,变量作为对象的指针。分配给变量时,不会修改任何对象,只是将变量重新分配给不同的对象。所以如果修改指定的对象,原始对象也会改变。

要解决此问题,您必须创建一个克隆原始对象的新对象。 有多种方法可以做到这一点,正如你在评论中指出的那样:

var newObj = Object.assign({}, obj)

有更好,更有效的方法,例如使用Object.assign

from io import BytesIO

def predict(image, labels, sess):
    imageBuf = BytesIO()
    image.save(imageBuf, format="JPEG")
    image = imageBuf.getvalue()

    softmax_tensor = sess.graph.get_tensor_by_name('final_result:0')
    predictions = sess.run(softmax_tensor,
                           {'DecodeJpeg/contents:0': image})
    predictions = np.squeeze(predictions)

    top_k = predictions.argsort()[-5:][::-1]  # Getting top 5 predictions

    return predictions[top_k[0]], labels[top_k[0]] # Return the raw value of tag matching and the matching tag.

underscorelodash也提供了克隆方法。

您可以在其他解决方案中看到此answer