我有以下数组:
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函数来执行这样的基本操作。
感谢。
答案 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);