【问题标题】:Store multiple data in javascript在javascript中存储多个数据
【发布时间】:2016-10-10 07:20:01
【问题描述】:

我正在尝试找出一种方法来将数据存储在 javascript 中的某种列表或数组中。我有三个变量,分别称为 id、left 和 top。都在函数里

id:作为参数传递给函数的元素的索引。 左:在函数内计算 top:函数内计算

我正在寻找的是每次我调用具有不同 id 的函数时,该函数应该能够计算和存储 left 和 top 并以某种方式存储 id、left 和 top 以便我可以在另一个函数中访问它们称呼。

或者我可以使用对象来使用这些值吗?

功能:

function getCoordinates(id) {
    scroll_value_Y = document.getElementById("svg_editor").scrollTop;
    scroll_value_X = document.getElementById("svg_editor").scrollLeft;
    offset_x = 298;
    offset_y = 102;
    var p = $('#' + id);
    var offset = p.offset();
    var left = Math.round(offset.left - offset_x + scroll_value_X);
    var top = offset.top - offset_y + scroll_value_Y;
    //something to store
}

在另一个函数调用中使用:

drawAggregate(getCoordinates(a1).left, getCoordinates(a1).top, getCoordinates(a2).left, getCoordinates(a2).top);

或者类似的东西。我该如何实现?

【问题讨论】:

  • 是的,使用数组。 var a = []a.push({top: top, left: left})(将索引视为 id)。
  • 你可以返回一个带有这3个属性的json对象。你的 json 看起来像 {id: <your id>, left: <left position>, top: <top position>}
  • 你说的是记忆化(比如每个 id 的坐标只计算一次)?

标签: javascript function object functional-programming parameter-passing


【解决方案1】:

是的,只需返回 Object

function getCoordinates(id) {
    scroll_value_Y = document.getElementById("svg_editor").scrollTop;
    scroll_value_X = document.getElementById("svg_editor").scrollLeft;
    offset_x = 298;
    offset_y = 102;
    var p = $('#' + id);
    var offset = p.offset();
    var left = Math.round(offset.left - offset_x + scroll_value_X);
    var top = offset.top - offset_y + scroll_value_Y;

    // Here we create and return an object with two keys: left and top
    return {
      top: top,
      left: left
    }
}

并且,为了避免计算两次值,您可以将值存储在其他对象 a1Coordsa2Coords

var a1Coords = getCoordinates(a1);
var a2Coords = getCoordinates(a2);

drawAggregate(a1Coords.left, a1Coords.top, a2Coords.left, a2Coords.top);

我假设您的坐标每次都在变化,因此您实际上并不想将坐标存储在 getCoordinates 函数中,而只是计算并返回它们。

【讨论】:

    【解决方案2】:

    你可以使用对象。

    你可以像这样将对象传递给函数:

    (function(){
    
        function incId(data){
        var id = data.id;
        data.id = id++;
        }
    
        function checkId(data){
        console.log(data.id);
        }
    
       var data = {id:0};
       incId(data);
       checkId(data);
    }());
    

    【讨论】:

      【解决方案3】:

      你可以返回一个对象:

      function getCoordinates(id)
      {
          var scroll_value_Y = document.getElementById("svg_editor").scrollTop;
          var scroll_value_X = document.getElementById("svg_editor").scrollLeft;
      
          var offset_x = 298;
          var offset_y = 102;
      
          var p = $('#' + id);
          var offset = p.offset();
      
          return {
              left: Math.round(offset.left - offset_x + scroll_value_X),
              top : offset.top - offset_y + scroll_value_Y
          };
      }
      
      var coords1 = getCoordinates(a1);
      var coords2 = getCoordinates(a2);
      
      drawAggregate(coords1.left, coords1.top, coords2.left, coords2.top);
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2016-06-21
        • 1970-01-01
        • 1970-01-01
        • 2018-03-07
        • 2021-09-29
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多