繁体   English   中英

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

[英]How to get object from array by object's unique property value?

基本上所有的事情都带有标题:如何通过对象的属性值从数组中获取对象,而对象的属性值是唯一的?


情况:

我当前的策略是将id attribute赋予该对象的属性IDdiv (所有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

该数组中可以有成千上万个对象,这就是为什么我在问题中添加了“最快”一词的原因:我担心性能,因为还有其他事情在进行。

另外,我更喜欢香草JS因为我目前正在学习它,但是如果您知道jQuery快速好方法,请继续,我将自己进行转换。


更多细节:

  • 对象处于数组中,因为我还需要对其进行迭代(比一个一个地处理它们要频繁得多)
  • 所有的一对一操作都是通过点击事件完成的(用户触发了,并且有一定的保护措施:一次只能执行一项操作)

还要保留对元素中相应对象的引用。

因此,每当单击元素时,元素对象本身将具有对相应对象的引用。 无需从数组中查找。

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

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

例:

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); 
};

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

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

请注意,对于一千个对象,无论如何可能不会有明显的区别。 不要过早优化 只需保持API的访问整洁,以便将来在需要时可以轻松换出数据结构。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM