javascript autoupdate数组

时间:2011-08-05 02:08:01

标签: javascript arrays mouse

我想做以下事情;

  1. 创建一个任意有限长度的2列数组(例如,10行)
  2. 从恒定速率数据流中顺序填充
  3. 一旦填充,从同一数据流中更新它(即替换元素0,向下移动1-9,丢弃旧9)
  4. (最佳地)输出每列的平均值
  5. 我自己可以做4个,但不知道怎么做1-3。

    如果有帮助,我正试图翻译它;

    http://kindohm.com/2011/03/01/KinectCursorControl.html(见可怕的摇动光标)。

2 个答案:

答案 0 :(得分:0)

var nums = [[1,2],[1,3],[2,1]];
alert(nums[0][0]); //1 
alert(nums[0][1]); //2

这是一个二维数组。加载数据与任何其他数组一样。

要按顺序更新它,您将在javascript中查看队列行为。使用unshift()和pop()。

Javascript Arrays:http://www.w3schools.com/jsref/jsref_obj_array.asp

最后,假设有10个位置,对列进行平均:

var num1 = 0;
var num2 = 0;
for(int i = 0;i<10;i++)
{
    num1 +=array[i][0];
    num2 +=array[i][1];
}
num1 = num1/10;
num2 = num2/10;

//num1 is now the average of the first column
//num2 is now the average of the second column

答案 1 :(得分:0)

这应该可行(顺便说一句好问题 - 有趣的小挑战,因为有很多方法可以做到)

var pointSmoother = (function(){
  var pointCount     = 10, // number of points to keep
      componentCount = 2,  // number of components per point (i.e. 2 for x and y)
      points = [];

  function clear() {
    var i, l;
    for( i = 0, l = componentCount ; i < l ; i++ ) {
      if( typeof points[i] === 'undefined' ) {
        points.push([]);
      } else {
        points[i].splice(0, pointCount);
      }
    }
  }

  clear();

  function pushPoint( /* point components */ ) {
    var i, l;
    for( i = 0 ; i < componentCount ; i++ ) {
      points[i].unshift(arguments[i]);
      points[i] = points[i].slice(0, pointCount);
    }
  }

  function average() {
    var i, j, l, sum, averages = [];
    l = points[0].length;
    for( i = 0 ; i < componentCount ; i++ ) {
      sum = 0;
      for( j = 0 ; j < l ; j++ ) {
        sum += points[i][j];
      }
      averages.push(sum/l);
    }
    return averages;
  }

  function getPoints() {
    return points;
  }

  return {
      getPoints: getPoints,
      pushPoint: pushPoint,
      clear:     clear,
      average:   average
  };
}());

它基本上做的是创建一个对象并将其分配给pointSmoother。该对象有4种方法:pushPoint()clear()getPoints()average()。在这个东西的顶部你可以设置一个点有多少个坐标,以及要保留多少个点(最大值)。我使用了每个点2个坐标的例子,一次10个点。

现在,我假设您一次以2组为单位获取您的值。我们称这两个值为xy。当您收到它们时,请使用pointSmoother.pushPoint(x, y);将它们添加到该项目中。然后,您可以通过调用pointSmoother.average()来获得“平均点”,这将返回一个数组(在这种情况下)有2个值:平均x和平均y。

如果你想亲自查看数组,你可以调用pointSmoother.getPoints()来返回点数组。最后,pointSmoother.clear()将清空先前值的数组。

这是一个类似的演示:http://jsfiddle.net/tapqs/1/