找到阵列中的单元格的更好解决方案

时间:2013-09-02 17:14:01

标签: javascript

我有以下数组:

var myArray = [
        {
            "id":1,
            "name":"name1",
            "resource_uri":"/api/v1/product/1"
        },
        {
            "id":5,
            "name":"name2",
            "resource_uri":"/api/v1/product/5"
        }
]

每一行都由它的唯一ID标识。我对Javascript很新,并且想知道找到基于id的单元格的最佳解决方案是什么。

例如,对于id:5;我的功能必须返回:

findCell(myTable, id=5);
// this function must return:
{
     "id":5,
     "name":"name2",
     "resource_uri":"/api/v1/product/5"
}

我很害怕做一个丑陋的循环...也许有一些内置的javascript函数来执行这样的基本操作。

感谢。

3 个答案:

答案 0 :(得分:2)

是的,有一个内置功能 - filter。我会这样用:

findCells(table, property, value) {
   return table.filter(function (item) {
      return item[property] === value;
   });
}

findCells(myTable, "id", 5);

这是您想要的一点修改版本:它可以按指定的属性名称值查找所有单元格。

编辑:使用for循环来搜索元素的第一个出现是可以的,实际上:

findCell(table, id) {
   var result = null;
   for (var i = 0, cell = table[0], l = table.length; i < l; i++, cell = table[i]) {
      if (cell.id === id) {
         result = cell;
         break;
      }
   }
   return result;
}

findCell(myTable, 5);

答案 1 :(得分:0)

试试这个可能有用的表达式

var result = myArray.filter(function(element, index) { return element.ID == 5; });

filter()有两个参数

元素 - 当前行

index - 当前行索引。

答案 2 :(得分:0)

如果您要坚持使用数组,那么'丑'for循环是兼容性的最佳选择。放入函数时并不难看:

function findById(id) {
    for(var i = 0; i < myArray.length; ++i) {
        if(myArray[i].id === id) return myArray[i];
    }
}

// Not checking return value here!
alert(findById(5).name);

Filter是另一种选择,如果您只关注最新版本的浏览器。它将返回一组值。

如果您的数组非常大,那么为有效查找引入某种索引是有意义的。它增加了额外的维护负担,但可以提高频繁查找的性能:

var index = {};
for(var i = 0; i < myArray.length; ++i) {
    index[myArray[i].id] = i;
}

// Find element with id=5
alert(myArray[index[5]].name);

Example