如何通过对象的唯一属性值从数组中获取对象?

时间:2016-02-02 09:17:59

标签: javascript jquery arrays object

基本上所有内容都标题:如何从对象的属性值中获取对象的属性值 unique 顺便说一下?

情况:

我目前的策略是,我将id attribute提供给该对象的属性 id div(所有ID都是唯一的,请查看对象数组如下所示):

<div id="3590" class="my-div"></div>

现在,当点击这个div时,我会得到id attribute,我需要找到正确的对象,因为我还需要获得一些其他属性,并对某些属性进行一些更改

为什么我这样做:

这似乎是唯一的方法因为我在其他问题中被告知没有办法来访问该对象,即使这个div是对象的属性之一(取看看下面的对象数组

如果不是这样,请告诉我。这非常重要!

对象数组:

0: myObject
  __e3_: Object
  div: div#3590.my-div
  gm_accessors_: Object
  gm_bindings_: Object
  id: 3590
  latlng: _.K
  map: _.ng
  uh: Object
  __proto__: c

1: myObject
  __e3_: Object
  div: div#3591.my-div
  gm_accessors_: Object
  gm_bindings_: Object
  id: 3591
  latlng: _.K
  map: _.ng
  uh: Object
  __proto__: c

//thousands of objects

该阵列中可能有数千个对象,这就是为什么我在这个问题上添加“最快”字样的原因:我关注的是性能,因为还有其他的东西在继续。

另外,我更喜欢vanilla JS,因为我现在正在学习它,但如果你在jQuery知道一个好的和快速的方式,请继续,我会自己转换它。

更多详情:

  • 对象在数组中,因为我还需要迭代它们(比逐个使用它们更频繁)
  • 所有一对一的操作都是通过点击事件完成的(用户触发并有一些保护:一次只能执行一项操作)

3 个答案:

答案 0 :(得分:4)

同时保持对元素中相应对象的引用。

因此,每当您单击一个元素时,元素对象本身将具有对相应对象的引用。无需从阵列中找到。

是的,请注意名称冲突。将对象分配给新键,以便对象不会替换元素对象的现有键的值。

对于旧浏览器,我不确定它们甚至可以渲染数千个元素。

示例:

var element = document.createElement("div");
element.myObj = {id: 3306, name: 'coolBoy'}; //make sure key, 'myObj' in this case,  doesn't already exist.
var myArray = [];
myArray.push(element.myObj); //if you need to keep in array as well.
element.onclick = function(e){ 
  console.log(e.currentTarget.myObj.name); 
};

答案 1 :(得分:1)

我建议使用Map集合 - 它允许快速迭代和按键快速访问,并且是内置数据结构。

如果您不想沿着ES6路线走(也不想使用垫片),那么合理快速的方法就是保持阵列的排序。您可以使用二进制搜索来访问单个元素。

请注意,对于一千个对象,无论如何都可能没有可观察到的差异。不要prematurely optimise。只需保持您的API访问集合清理,以便将来可以轻松交换数据结构,如果有需要。

答案 2 :(得分:-1)

function getObjectFromId(id) {
    return ARR.filter(function (obj) {
        return obj.id === id;
    })[0];
}