【问题标题】:How to find index deep in javascript array and return other part of array?如何在javascript数组中找到索引并返回数组的其他部分?
【发布时间】:2013-01-14 22:45:20
【问题描述】:

我想在下面返回rj: Object,并且我有一个要匹配的索引键kid: 1。考虑到主要Object 可以包含> 10k 个项目,最好/最快的方法是什么?

Object
 coord: MM.Coordinate
 data: Object
 geometry: Object
 properties: Object
   kid: 1            <== index id
   rj: Object        <== object i want
   __proto__: Object
__proto__: Object
element: HTMLDivElement
location: MM.Location
touch: true
__proto__: Object

【问题讨论】:

  • 这个主要对象是什么样子的?这个对象是主要的吗?还是这只是主要对象的一个​​条目?
  • 啊,对不起,它来自 Chrome 控制台。顶部Object 是主要的,是的。所以我会有10k的那些。那么唯一标识符在Object[properties[kid]]的深处,而我真正想要的对象是它的隔壁邻居。
  • 主要对象是否以某种方式排序?您是否需要通过其唯一 ID 查找多个项目?
  • @Bergi 我需要找到其中的许多,因此性能是一个问题。但是没有索引 - 除非 kid 算作索引。我的意思是,那会很棒! ;)
  • 主要对象是一个数组?从 main 看这个系列怎么样?另外,是否保证所有条目都具有propertieskidrj 属性?

标签: javascript arrays indexing find


【解决方案1】:

如果你需要查找很多对象,你可以建立一个查找表。遍历您的主要对象集合,并通过它们的标识符将它们存储在键值映射(简单对象)中:

var mainsByKid = {}; // if the keys are integers (and not sparse), use an array
for (var i=0; i<mains.length; i++) {
     var main = mains[i],
         key = main.properties.kid; // must be unique
     mainsByKid[key] = main;
}

现在您可以通过

简单地访问您的对象
mainsByKid[1];

【讨论】:

  • 应该在对象上使用 for-in 循环,除非所讨论的对象是一个数组。
  • 在我们不知道该集合的真实外观之前,我只能假设它是一个数组。已经在这个问题上对你的 cmets 投了赞成票 :-)
  • 非常感谢,这正是我需要的。原来我正在使用的 mapbox.js 已经实现了基本完全相同的东西。再次感谢。
猜你喜欢
  • 1970-01-01
  • 2012-12-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多