如何通过名称而不是键号从数组中获取值

时间:2013-12-08 15:31:03

标签: javascript node.js

我创建了一个对象并添加了一个资产b345,其中包含一些属性:

asset = [];
asset.push({'b345' : { 'prop1':'value 1', 'prop2': null}});

我希望稍后将更多资产推送到同一资产对象中。这样asset对象就可以保存代码中生成的所有资产。

稍后在我的代码中,我想通过唯一标识符b345检索与其中一个条目关联的数组。但这似乎不起作用。

asset['b345'];

但这导致undefined。但是,如果我尝试通过asset[0]获取数据,它将返回正确的对象。

我怎样才能安排这个容器对象asset以便我可以 1- easliy添加新对象
2-通过标识符检索对象?

ps:我发现了这个:https://npmjs.org/package/hashtable但它只适用于大型存储;它说它只能通过对象来完成。但我找不到它是如何工作的:(

3 个答案:

答案 0 :(得分:2)

使用对象

而不是使用数组
asset = {};
asset['b345'] =  { 'prop1':'value 1', 'prop2': null};

然后asset['b345']会给你{ 'prop1':'value 1', 'prop2': null}

答案 1 :(得分:2)

如果您不需要按照一致的顺序迭代对象列表,那么您可能不应该首先创建一个数组;只做一个对象:

var asset = {};
asset['b345'] = { 'prop1':'value 1', 'prop2': null};

如果你需要同时拥有数组行为和键查找,一种有效的方法是创建一个数组一个对象:

var assets = {
  list: []
, map: {}
, push: function(key, value) {
    map[key] = value;
    list.push({ key: value });
  }
};

然后:

assets.push('b345', { 'prop1': 'value 1', 'prop2': null });

随后assets.list[0]将为{ b345: { prop1: 'value 1', prop2: null }}assets.map['b345']将为{prop1: 'value 1', 'prop2': null}

你想让它更合理地处理更新,但这是基本模式。

答案 2 :(得分:0)

有很多方法可以做到这一点。要简单地解决这个问题:

var asset = new Object; // new object
asset['b345'] = {'prop1':'value 1', 'prop2': null}; // an object property = new object (wrapped in {})

另一种方式是:

asset = {'b345' : { 'prop1':'value 1', 'prop2': null}};