通过 Javascript 2d 数组进行过滤
Filtering through Javascript 2d array
>我有一个这样的二维数组
var items = [['alex',2],['alex',4],['alex',6],['jhon',11],['jhon',13]];
但是在 html 中,我想像这样渲染这个数组
**Names** **Numbers**
alex => 2,4,6
jhon => 11,13
您可以使用
reduce()
返回对象,然后Object.keys()
并forEach
循环以添加到HTML
var items = [['alex',2],['alex',4],['alex',6],['jhon',11],['jhon',13]];
var result = items.reduce(function(r, e) {
r[e[0]] = (r[e[0]] || []).concat(e[1]);
return r;
}, {});
var rows = '';
Object.keys(result).forEach(function(e) {
rows += '<tr><td>' + e + '</td><td>' + result[e].join(',') + '</td></tr>';
});
document.querySelector('table tbody').innerHTML += rows;
<table>
<tbody>
<tr><td>Names</td><td>Numbers</td></tr>
</tbody>
</table>
我提出了一种jQuery方法(这不是最好的解决方案,而只是不同的观点):
$(function () {
var items = [['alex',2],['alex',4],['alex',6],['jhon',11],['jhon',13]];
$.each(items, function(indexInArray, value) {
var cellIfExist = $('#result').find('td:contains(' + value[0] + ')');
if (cellIfExist.length > 0) {
cellIfExist.next().text(cellIfExist.next().text() + ', ' + value[1]);
} else {
$('#result').append('<tr><td>' + value[0] + '</td><td>' + value[1] + '</td></tr>')
}
});
});
<script src="https://code.jquery.com/jquery-1.12.1.min.js"></script>
<table id="result">
<tr>
<td>**Names**</td>
<td>**Numbers**</td>
</tr>
</table>
老派的方法可能是遍历数组,并在这样做的同时构建一个非常像关联数组的对象。
var items = [['alex',2],['alex',4],['alex',6],['jhon',11],['jhon',13]];
var group = { }
for(var i = 0; i < items.length; i++) {
var pair = items[i];
if(group[pair[0]]) {
group[pair[0]].push(pair[1]);
}
else {
group[pair[0]] = [pair[1]];
}
}
然后,"组"是分组对象。使用 for 循环迭代它。
使用Array.forEach
函数的简单解决方案:
var items = [['alex',2],['alex',4],['alex',6],['jhon',11],['jhon',13]],
names = {};
items.forEach(function (arr) {
(names[arr[0]])? names[arr[0]].push(arr[1]) : (names[arr[0]] = [arr[1]]);
});
console.log(JSON.stringify(names, 0, 4));
相关文章:
- 仅当选择特定的选择选项时,才使用JavaScript过滤数组
- 在JavaScript中,按日期和之后的名称过滤数组
- 在我的例子中,如何过滤数组值
- 在AngularJS中按数字过滤数组
- JavaScript 过滤器方法返回过滤数组和空数组
- 精确过滤数组
- 使用 JavaScript 或 jQuery 过滤数组
- 在 javascript 跨浏览器中过滤数组
- 当对象键值在数组中时如何过滤数组
- 角度按条件过滤数组中的多个项目
- 是否可以使用下划线按多个值过滤数组值
- 如何在 javascript 中的对象数组中过滤数组
- 在 javascript 中过滤数组以查找 3 个连续的数字
- 如何在javascript中减少和过滤数组
- 显示过滤数组的长度
- AngularJS:如何获取 ng-options 的过滤数组
- 有没有办法在 angularjs 过滤器中显示过滤数组的属性
- AngularJS - 通过 3 个选择输入过滤数组
- jQuery/JavaScript:用另一个数组过滤数组
- 如何过滤数组并将其与 Javascript 中的函数参数进行比较