给定一个对象数组,例如:
var things = [{
"id": "123a",
"name": "456"
},{
"id": 123b",
"name": 456"
},{
"id": "123c",
name": "456"
},{
"id": "123d",
"name": "456"
}];
找到包含这些 id 的所有元素的最快方法是什么。
目前我只是在做一些事情:
$.each(things, function(i, e) {
$row = $('td[vid=' + e.id + ']', table);
});
但是感觉很慢。这适用于客户端上的大型数据网格,40 列,250 行。表中充满了单个值,一个数据矩阵,我需要找到单元格并修改值,所以我可以更新一整列数据。
想知道是否有更有效的方法来做到这一点。
编辑:
所以基本上表结构是这样的:
<table>
<thead>
<tr>
<th> </th>
<th vid="1">Version 1</th>
<th vid="2">Version 2</th>
<th vid="3">Version 3</th>
<th vid="4">Version 4</th>
</tr>
</thead>
<tbody>
<tr>
<td destid="1">Dest 1</td>
<td destid="2" vid="1">x</td>
<td destid="2" vid="2">x</td>
<td destid="2" vid="3">x</td>
<td destid="2" vid="4">x</td>
</tr>
<tr>
<td destid="2">Dest 2</td>
<td destid="2" vid="1">x</td>
<td destid="2" vid="2">x</td>
<td destid="2" vid="3">x</td>
<td destid="2" vid="4">x</td>
</tr>
<tr>
<td destid="3">Dest 3</td>
<td destid="3" vid="1">x</td>
<td destid="3" vid="2">x</td>
<td destid="3" vid="3">x</td>
<td destid="3" vid="4">x</td>
</tr>
</tbody>
</table>
如果您从一个版本的顶部选择,那么结果将是:
[{
id: 5,
vid: 2,
destid: 1
},{
id: 6,
vid: 2,
destid: 2
},{
id: 7,
vid: 2,
destid: 3
}]
同样,在为所有版本选择目的地时也是类似的。
我认为对我来说最好的方法是将单元重构为:
id="2-1"
| id="2-2"
|id="2-3"
然后使用var cell = document.getElementById(data.vid + "-" + data.destid);
而不是目前寻找像这样的细胞:
var cell = $('td[vid=' + data.vid + '][destid=' + data.destid + ']', table);