在数组中查找单元格的更好解决方案
Better solution to find a cell in an array
我有以下数组:
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函数可以执行这样的基本操作。
谢谢。
是的,有一个内置函数-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);
试试这个表达式,这可能会对有所帮助
var result = myArray.filter(function(element, index) { return element.ID == 5; });
filter()有两个参数
元素-当前行
index—当前行索引。
如果您要坚持使用数组,那么"丑陋"的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);
示例
相关文章:
- 更好的解决方案HTML元素幻灯片从右侧CSS转换
- 寻找使用Javascript从Kendo UI时间选择器中减去时间的更好替代方案
- 将数据加载到地图上的更好解决方案
- AngularJS中的动态表单验证 - 是否有更好的解决方案/方法
- 使用Jquery处理大量点击事件的更好解决方案
- 将对象完全转换为键和值的数组:更好的解决方案
- 为静态类型检查注释javascript的好解决方案是什么
- 比“类似回调的行为”更好的解决方案
- setTimeout 是使用 javascript 执行异步函数的好解决方案吗?
- 如何为此 jquery 代码使用函数参数,或者是否有更好的解决方案
- 有没有更好的解决方案
- 谷歌地图API V3,这是将标记捕捉到道路的好解决方案吗?
- 通过ssl请求传递凭据是不安全的,什么'是更好的(KISS)解决方案
- 在数组中查找单元格的更好解决方案
- 改进这个自定义函数addClassIfVarDefined()或共享更好的解决方案
- 卸载/重新加载javascript或用于大量ajax内容的更好的解决方案
- 需要一个更好的解决方案来从JavaScript文件附加HTML
- 标题大小写一个句子 - 哪个解决方案更好,为什么
- Regex从URL中提取匹配的字符串(有效,更好的解决方案?)
- 用于取消约束对象阵列的更好解决方案