用什么javascript数组或对象或混合使用它们?

时间:2017-02-08 18:16:57

标签: javascript

我需要一个javascript数组或对象,或者可能是为此任务混合的东西:

我有这个属性: 顾客 项目 条形码

So I will fill all fields with loop like this:
customer = 1
item = 1
barcode = 5555

customer = 1
item = 2 
barcode = 6666

客户和商品的组合将是唯一的,所以我想直接访问价值(条形码),如下所示:

“给我条形码值,其中customer = 1和item 1,所以结果必须是5555”

我不想使用循环来查找值,我希望直接访问。

谢谢!

目前,我已经创建了示例脚本。我的问题还有什么更好的吗?

function cacheBarcodes() {
    var results = [];
    // Here the database is pushing all 100k+ records to the array
    results.push(['1', '1', '5555']);
    results.push(['1', '2', '6666']);

    return results;
}

function getBarcode(results,customer,item) {

    for (var i = 0; i < results.length; i++) {
        var db_customer = results[i][0];
        var db_item = results[i][1];
        var db_barcode = results[i][2];

        if (db_customer == customer && db_item == item ) {
            return db_barcode;
        }
    }

}
results = cacheBarcodes();
alert(getBarcode(results,'1','1'));

1 个答案:

答案 0 :(得分:1)

首先,需要将最重要的事情排除在外:这是一个糟糕的想法。实际上不要这样做,除非你方式确定你需要:

var salt = "___";
var genKey = function(r) {
  return '' + r.customer + salt + r.item;
};

var barcodes = {};
records.forEach(function(r) {
  var key = genKey(r);
  barcodes[key] = r.barcode;
});

现在,您可以使用记录调用genKey来访问条形码,以获取函数调用和散列查找的成本,而不是循环遍历记录数组。正如Anirudha在评论中指出的那样,你可能一无所获。如果你在其上放置一个界面,它会变得更好(在清洁度,而不是性能方面):

class Lookup {
  constructor () {
    this._barcodes = {};
  }

  _genKey (customer, item) {
    return '' + customer + '___' + item;
  }

  addRecord (r) {
    let key = this._genKey(r.customer, r.item);
    this._barcodes[key] = r.barcode;
    return this;
  }

  getBarcode (customer, item) {
    let key = this._genKey(customer, item);
    return this._barcodes[key];
  }
};