多维数组与对象数组



我正在构建一个运行基于代理的模型的房地产市场模拟,我想跟踪单个交易,这样我就可以用数据创建图表和统计数据。我想通过使用一种类型的对象来实现这一点,我将称之为Transaction:

var Transaction = function(house, askingPrice, soldPrice, daysOnMarket) {
    this.date = gameDate
    this.house = house
    this.askingPrice = askingPrice
    this.soldPrice = soldPrice
    this.daysOnMarket = daysOnMarket
};

每次出现事务时,它都会触发创建一个新的Transaction对象实例,并被推送到transArray:

transArray.push (new Transaction(house, askingPrice, soldPrice, daysOnMarket));

这是为了我所说的目的积累和存储这些数据的最佳方式吗?还是最好使用二维数组,其中y是date,x是house, askingPrice, soldPrice, daysOnMarket?你认为每种方法的优点和缺点是什么?

您可以使用对象数组,这样我就可以使用熟悉的动词函数来操作它们;就像查找一样。可能有更多的"纯"Javascript方法来完成其中的一些操作,但我也测试了lookup的速度,它在这种形式下是不错的

这是从另一个答案中复制的,这里有一个更复杂的例子:将对象数组绑定到它们的特定表单字段,以更新/删除

请注意,例如hasDuplicates函数,这样您就可以很容易地在对象数组上支持它,如果您有多个对象数组,则可以重用每个对象数组上的函数。

var myApp = myApp || {};
myApp.arrayObj = {
  indexOf: function(myArray, searchTerm, property) {
    for (var i = 0; i < myArray.length; i++) {
      if (myArray[i][property] === searchTerm) return i;
    }
    return -1;
  },
  indexAllOf: function(myArray, searchTerm, property) {
    var ai = [];
    for (var i = 0; i < myArray.length; i++) {
      if (myArray[i][property] === searchTerm) ai.push(i);
    }
    return ai;
  },
  lookup: function(myArray, searchTerm, property, firstOnly) {
    var found = [];
    var i = myArray.length;
    while (i--) {
      if (myArray[i][property] === searchTerm) {
        found.push(myArray[i]);
        if (firstOnly) break; //if only the first 
      }
    }
    return found;
  },
  lookupAll: function(myArray, searchTerm, property) {
    return this.lookup(myArray, searchTerm, property, false);
  },
  remove: function(myArray, searchTerm, property, firstOnly) {
    for (var i = myArray.length - 1; i >= 0; i--) {
      if (myArray[i][property] === searchTerm) {
        myArray.splice(i, 1);
        if (firstOnly) break; //if only the first term has to be removed
      }
    }
  },
  removeByIndex: function(myArray, index) {
    myArray.splice(index, 1);
  }
};

相关内容

  • 没有找到相关文章

最新更新