在javascript中存储多个数据

在javascript中存储多个数据,javascript,function,object,functional-programming,parameter-passing,Javascript,Function,Object,Functional Programming,Parameter Passing,我正试图找到一种方法,用javascript将数据存储在某种列表或数组中。我有三个变量,分别是id、left和top。所有都在函数中 id:作为参数传递给函数的元素的索引。 左:在函数内计算 top:在函数内计算 我要寻找的是,每次我用不同的id调用函数时,函数应该能够计算和存储left和top,并以某种方式存储id、left和top,以便我可以在另一个函数调用中访问它们 或者我可以使用对象来使用值吗 功能: function getCoordinates(id) { scroll_va

我正试图找到一种方法,用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);

或者类似的。如何实现这一点?

舒尔您可以使用对象

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

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

舒尔您可以使用对象

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

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

是的,只需返回一个
对象

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
    }
}
而且,为了避免计算两次值,您可以将值存储在其他对象中
aCoords
a2Coords

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

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

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

是的,只需返回一个
对象即可

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
    }
}
而且,为了避免计算两次值,您可以将值存储在其他对象中
aCoords
a2Coords

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

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

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

您可以返回一个对象:

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

您可以返回一个对象:

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

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