在javascript中存储多个数据

时间:2016-06-09 14:50:42

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

我试图找出一种方法来解决如何在javascript中以某种列表或数组存储数据的方法。我有三个变量叫做id,left和top。所有都在函数

id:作为参数传递给函数的元素的索引。 left:在函数内计算 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);

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

3 个答案:

答案 0 :(得分:1)

你可以使用对象。

您可以将对象传递给函数,如下所示:

(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);
}());

答案 1 :(得分: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 :(得分:1)

您可以返回一个对象:

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);