按行号

时间:2016-01-14 21:36:04

标签: javascript jquery arrays handsontable

enter image description here

我正在根据http://docs.handsontable.com/0.15.0-beta6/demo-search-for-values.html的内置搜索功能,使用handontable复制实时过滤器框。

现在我正在使用文档中最简单的用例(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/

这样做的原因是获取匹配的单元格的行号。

所以现在我有&#39;行&#39; - 过滤行的行号,我可以使用:

获取原始数据
data = hot.getData();

是否有一种简单的方法可以按行号(即)javascript中的索引过滤数据(数组数组)。

我的计划是抓取过滤后的数据行并重新渲染表格。

编辑:因为我的问题可能令人困惑。这里的例子:

 data = [a,b,c,d] - the letters are arrays
 rows = [0,1],

我想应用过滤器,因此输出

data = [a,b]

1 个答案:

答案 0 :(得分:3)

你可以通过一个非常简单的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>');