乘以两种数组

时间:2017-06-21 19:24:35

标签: javascript jquery

我试图将两个数组相乘。一个数组的值是$('#element').val();,另一个是获取GET请求的结果。

控制台输出:

enter image description here

这是我的代码:



$("#sendeS1").click(function() {
  var i = 1;
  var Q_Values = [];
  var G_Values = [];
  var R_Values = [];

  for (i; i <= 20; i++) {
    $.get("bewertung/get/weight/" + i, function(weight) {
      Q_Values[i - 1] = $('#startup_1').find('.' + i).val();
      G_Values[i - 1] = weight;
      R_Values[i - 1] = Q_Values[i - 1] * G_Values[i - 1];
      console.log("Q:" + Q_Values);
      console.log("G:" + G_Values);
      console.log("R:" + R_Values);
    });

    $.ajax({
      url: '/bewertung/1',
      type: 'POST',
      data: {
        startup_id: '1',
        user_id: localStorage.getItem("userid"),
        question_id: i,
        wert: G_Values[i - 1]
      }
    });
  }
});
&#13;
&#13;
&#13;

1 个答案:

答案 0 :(得分:1)

这样做:

  • let块中的变量i使用for,因此它是一个单独的变量,在循环完成后仍然可以引用它并且你只是那时从get来电

  • 获取回复
  • 使用+val()转换为数字(虽然在您的情况下并非绝对必要,因为与动态转换相乘)

代码:

$("#sendeS1").click(function () {
    var Q_Values = [];
    var G_Values = [];
    var R_Values = [];

    for(let i = 1; i <= 20; i++){
        $.get("bewertung/get/weight/"+i, function (weight) {
            Q_Values[i-1] = +$('#startup_1').find('.'+i).val();
            G_Values[i-1] = weight;
            R_Values[i-1] = Q_Values[i-1] * G_Values[i-1];
            console.log("Q:"+Q_Values);
            console.log("G:"+G_Values);
            console.log("R:"+R_Values);
        });
        //...etc

警告:当for循环完成时,数组还没有值,所以不要假设你在循环之后就拥有了所有数据。有关处理此问题的几种方法,请参阅How do I return the response from an asynchronous call?

一种不是最好的代码,但最容易理解的方法是使用倒计时,所以你知道何时拥有所有数据,然后调用一个将进行进一步处理的函数:

$("#sendeS1").click(function () {
    var Q_Values = [];
    var G_Values = [];
    var R_Values = [];
    var countDown = 20;

    for(let i = 1; i <= 20; i++){
        $.get("bewertung/get/weight/"+i, function (weight) {
            Q_Values[i-1] = +$('#startup_1').find('.'+i).val();
            G_Values[i-1] = weight;
            R_Values[i-1] = Q_Values[i-1] * G_Values[i-1];
            console.log("Q:"+Q_Values);
            console.log("G:"+G_Values);
            console.log("R:"+R_Values);
            countDown--;
            if (countDown == 0) processResults(Q_Values, G_Values, R_Values);
        });
        //...etc

但我真的建议调查Promises。这真的是要走的路。幸运的是,jQuery $.get返回一个承诺,这些承诺可以传递给$.when,当所有这些承诺都得到满足时,它将调用它的then方法。 (另见What does $.when.apply($, someArray) do?)。

$("#sendeS1").click(function () {
    var Q_Values = [];
    var G_Values = [];
    var R_Values = [];
    var promises = [];

    for(let i = 1; i <= 20; i++){
        promises.push($.get("bewertung/get/weight/"+i, function (weight) {
            Q_Values[i-1] = +$('#startup_1').find('.'+i).val();
            G_Values[i-1] = weight;
            R_Values[i-1] = Q_Values[i-1] * G_Values[i-1];
            console.log("Q:"+Q_Values);
            console.log("G:"+G_Values);
            console.log("R:"+R_Values);
        }));
        //...etc
    }
    $.when.apply($, promises).then(function() {
        // all is done, process the results here ...
    });

这段代码可以进一步改进,以便每个承诺都能解析为自己的价值,而不是将产品推送到数组中,但这可以让你自己看作一个练习。