weixin_33728268 2019-05-21 08:10 采纳率: 0%
浏览 112

JavaScript读取对象数组

I have jquery code from which I'm fetching the data report based on weekdays.
What I want is to read an array object returned by ajax.
Here is the script :

<script>
export default {
    data() {
        return {
            currentcohortgraphdata: [{"Monday":"0","Tuesday":"0","Wednesday":"0","Thursday":"0","Friday":"0","Saturday":"0","Sunday":"0"}],
        }
    },
    mounted() {

    },
    methods: {
        loadCohortAttendancies() {
            this.$Progress.start();
            axios.get("api/loadCohortAttendancies").then(({data}) => (this.currentcohortgraphdata = data));
            this.$Progress.finish();
            var result = this.currentcohortgraphdata;

            result.forEach(function (e) {
                if (e.Monday > 0) {
                    alert(e.Thursday);
                }
            });
        }
    },
    created() {
        this.loadCohortAttendancies();
    },
    mounted() {

    }
}

When I run above script from ajax request axios.get("api/loadCohortAttendancies").then(({data}) => (this.currentcohortgraphdata = data)); The results returned from the request is [{"Monday":"12","Tuesday":"10","Wednesday":"3","Thursday":"5","Friday":"4","Saturday":"1","Sunday":"9"}] . But unfortunately when I run the script I dont get result from the alert(e.Thursday); part of the script, can anyone point where I'm getting wrong? Thanks in advance

  • 写回答

3条回答 默认 最新

  • 妄徒之命 2019-05-21 08:24
    关注

    What is happening is that you are running your code before your request is done, and it results in running your forEach with default values

    currentcohortgraphdata: [{"Monday":"0","Tuesday":"0","Wednesday":"0","Thursday":"0","Friday":"0","Saturday":"0","Sunday":"0"}],

    Simply move ur code inside .then block

    axios.get("api/loadCohortAttendancies").then(({data}) => {
         this.currentcohortgraphdata = data
         this.$Progress.finish();
         var result = this.currentcohortgraphdata;
    
         result.forEach(function (e) {
             if (e.Monday > 0) {
                 alert(e.Thursday);
             }
         });
    });
    

    Alternatively, you can use async/await syntax:

    methods: {
      async loadCohortAttendancies() {
        this.$Progress.start();
        const { data } = await axios.get("api/loadCohortAttendancies");
        this.currentcohortgraphdata = data;
        this.$Progress.finish();
        const result = this.currentcohortgraphdata;
    
        result.forEach(function (e) {
          if (e.Monday > 0) {
            alert(e.Thursday);
          }
        });
      }
    },
    
    评论

报告相同问题?