首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >按键值在Object中查找元素

按键值在Object中查找元素
EN

Stack Overflow用户
提问于 2014-02-07 16:28:36
回答 3查看 3.9K关注 0票数 3

根据其中一个键的值,对象数组中查找元素(对象)的最佳结构解决方案是什么?

例如,我们有数组:

代码语言:javascript
复制
var someArray = 
[
  {id:17, color:'black', width:50},
  {id:34, color:'red', width:150},
  {id:49, color:'gree', width:10}
]

我们需要找到一个id-key = 34的对象。

每次我们都要做循环来找到对象。我考虑的是重组和拥有对象,而不是像这样的数组:

代码语言:javascript
复制
 var someObject = 
    {
      17: {id:17, color:'black', width:50},
      34: {id:34, color:'red', width:150},
      49: {id:49, color:'gree', width:10}
    }

现在我们可以在一步someObject34中完成它,但是如果我们想要保持order呢?

提前谢谢。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-02-08 13:38:50

我考虑过重组和拥有对象而不是数组。

是的,那很好。

但如果我们想遵守命令呢?

我倾向于使用一个包含按正确顺序排列的键的额外数组,如

代码语言:javascript
复制
var order = [17, 34, 47];

要循环它们,您可以使用

代码语言:javascript
复制
for (var i=0; i<order.length; i++) {
    … someObject[order[i]] …
}
票数 2
EN

Stack Overflow用户

发布于 2014-02-07 16:40:14

您应该在id前缀以避免命名冲突,如下所示:

代码语言:javascript
复制
var database = 
{
  'row_17' : {id:17, color:'black', width:50},
  'row_34' : {id:34, color:'red',   width:150},
  'row_49' : {id:49, color:'gree',  width:10}
};

此时,您可以使用以下代码查询对象:

代码语言:javascript
复制
function retrieve(database, id)
{
  id = 'row_' + id;

  if (!database.hasOwnProperty(id))
  {
    return null;
  }

  return database[id];
}

持久化功能是:

代码语言:javascript
复制
function persist(database, obj)
{
  database['row_' + obj['id']] = obj;
}

如果你需要遵守命令,你首先要明白你在说的是什么顺序。

id的吗?插入的吗?还是任意的财产?

通过过滤(提取项并将它们放入一个单独的数组中,这将是查询结果,或者带有其他字段或结构),所有这些问题都有解决方案。

编辑:如何保持插入顺序

您将需要一个跟踪顺序的数组:

代码语言:javascript
复制
database._ordered = [];

在插入时,也将项目推到那里:

代码语言:javascript
复制
database._ordered.push(obj);

现在,您可以按键和所有订购的项目来选择单个项目。在对象中不可能有订单,这只是一个错误的工具。

建议使用row_前缀来避免与方法之类的命名冲突。对象应该保存属性和方法,如果您像字典一样使用它,至少可以通过前缀来防止干扰。

票数 1
EN

Stack Overflow用户

发布于 2014-07-30 16:08:19

您可以从findWhere库中使用函数underscore,在您的示例中,如下所示:

代码语言:javascript
复制
_.findWhere(someArray, {id: 34})
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21632940

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档