0

我有以下数组:

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"
}

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

谢谢。

4

3 回答 3

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);
于 2013-09-02T17:19:37.837 回答
0

试试这个表达式,这可能会有所帮助

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

filter() 有两个参数

元素 - 当前行

index - 当前行索引。

于 2013-09-02T17:26:18.680 回答
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);

如果您只关心最新版本的浏览器,过滤器是另一种选择。它将返回一个值数组。

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

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

例子

于 2013-09-02T17:26:54.967 回答