按行号过滤数组数组
Filter array of arrays by row number
我正在根据 http://docs.handsontable.com/0.15.0-beta6/demo-search-for-values.html.
的内置搜索功能,使用 handsontable 重现实时过滤框
现在我正在处理文档中最简单的用例 (http://jsfiddle.net/kc11/uL3L4teL/1)。
数据是数组的数组:
var
data = [
['Nissan', 2012, 'black', 'black'],
['Nissan', 2013, 'blue', 'blue'],
['Chrysler', 2014, 'yellow', 'black'],
['Volvo', 2015, 'yellow', 'gray']
],
如文档中所述,在此代码中,如果您输入搜索字符串,您将使用以下函数将匹配的单元格输出到控制台:
Handsontable.Dom.addEvent(searchFiled, 'keyup', function (event) {
var queryResult = hot.search.query(this.value);
console.log(queryResult);
hot.render();
我已经这样修改了:
function getRowsFromObjects(queryResult) {
rows = [];
for (var i = 0, l = queryResult.length; i < l; i++) {
debugger
rows.push(queryResult[i].row);
}
console.log('rows',rows);
return rows;
}
Handsontable.Dom.addEvent(searchFiled, 'keyup', function (event) {
var queryResult = hot.search.query(this.value);
console.log(queryResult);
rows = getRowsFromObjects(queryResult);
hot.render();
});
http://jsfiddle.net/kc11/uL3L4teL/1/
这样做的原因是要获取匹配的单元格的行号。
所以现在我有 'rows' - 筛选行的行号,我可以使用以下方法获取原始数据:
data = hot.getData();
有没有一种简单的方法可以通过行号(即 javascript 中的索引来过滤数据(数组的数组)。
我的计划是然后抓取过滤后的数据行并重新呈现 table。
编辑:因为我的问题可能令人困惑。这是示例:
data = [a,b,c,d] - the letters are arrays
rows = [0,1],
我想应用一个过滤器,所以输出是
data = [a,b]
您可以通过相当简单的 Array.prototype.filter
调用来做到这一点:
// Setup...
var data = [], indexes = [1, 3, 5, 7, 8, 9];
for(var i = 0; i < 15; i++) {
data.push('item #' + i);
}
// This is where the magic happens
var filtered = data.filter(function(d, ix) { return indexes.indexOf(ix) >= 0; });
// Output...
document.write('<pre>' + JSON.stringify(filtered) + '<\pre>');
或者,您可以颠倒逻辑并通过调用 Array.prototype.map
来实现更好的性能但不太连贯的代码:
// Setup...
var data = [], indexes = [1, 3, 5, 7, 8, 9];
for(var i = 0; i < 15; i++) {
data.push('item #' + i);
}
// This is where the magic happens
var filtered = indexes.map(function(i) { return data[i]; });
// Output...
document.write('<pre>' + JSON.stringify(filtered) + '<\pre>');
我正在根据 http://docs.handsontable.com/0.15.0-beta6/demo-search-for-values.html.
的内置搜索功能,使用 handsontable 重现实时过滤框现在我正在处理文档中最简单的用例 (http://jsfiddle.net/kc11/uL3L4teL/1)。
数据是数组的数组:
var
data = [
['Nissan', 2012, 'black', 'black'],
['Nissan', 2013, 'blue', 'blue'],
['Chrysler', 2014, 'yellow', 'black'],
['Volvo', 2015, 'yellow', 'gray']
],
如文档中所述,在此代码中,如果您输入搜索字符串,您将使用以下函数将匹配的单元格输出到控制台:
Handsontable.Dom.addEvent(searchFiled, 'keyup', function (event) {
var queryResult = hot.search.query(this.value);
console.log(queryResult);
hot.render();
我已经这样修改了:
function getRowsFromObjects(queryResult) {
rows = [];
for (var i = 0, l = queryResult.length; i < l; i++) {
debugger
rows.push(queryResult[i].row);
}
console.log('rows',rows);
return rows;
}
Handsontable.Dom.addEvent(searchFiled, 'keyup', function (event) {
var queryResult = hot.search.query(this.value);
console.log(queryResult);
rows = getRowsFromObjects(queryResult);
hot.render();
});
http://jsfiddle.net/kc11/uL3L4teL/1/
这样做的原因是要获取匹配的单元格的行号。
所以现在我有 'rows' - 筛选行的行号,我可以使用以下方法获取原始数据:
data = hot.getData();
有没有一种简单的方法可以通过行号(即 javascript 中的索引来过滤数据(数组的数组)。
我的计划是然后抓取过滤后的数据行并重新呈现 table。
编辑:因为我的问题可能令人困惑。这是示例:
data = [a,b,c,d] - the letters are arrays
rows = [0,1],
我想应用一个过滤器,所以输出是
data = [a,b]
您可以通过相当简单的 Array.prototype.filter
调用来做到这一点:
// Setup...
var data = [], indexes = [1, 3, 5, 7, 8, 9];
for(var i = 0; i < 15; i++) {
data.push('item #' + i);
}
// This is where the magic happens
var filtered = data.filter(function(d, ix) { return indexes.indexOf(ix) >= 0; });
// Output...
document.write('<pre>' + JSON.stringify(filtered) + '<\pre>');
或者,您可以颠倒逻辑并通过调用 Array.prototype.map
来实现更好的性能但不太连贯的代码:
// Setup...
var data = [], indexes = [1, 3, 5, 7, 8, 9];
for(var i = 0; i < 15; i++) {
data.push('item #' + i);
}
// This is where the magic happens
var filtered = indexes.map(function(i) { return data[i]; });
// Output...
document.write('<pre>' + JSON.stringify(filtered) + '<\pre>');