Angularjs 如何在angular controller中将键和值推送到数组

Angularjs 如何在angular controller中将键和值推送到数组,angularjs,arrays,Angularjs,Arrays,我想根据用户提供的行数和列数过滤数据 在从给定位置读取excel文件后,我在控制器上获取数据,excel可能包含多张工作表。工作表名称将以下拉形式出现 我想根据通过列的标题名过滤行数据,这样在定义列之前,行只有值。目前我得到的是整行值 我写了一个这样的逻辑,但这是行不通的 var rowData=[]; for(var i=0;i<headerNames.length;i++){//headerNames contains column names for(var j=0;j<

我想根据用户提供的行数和列数过滤数据

在从给定位置读取excel文件后,我在控制器上获取数据,excel可能包含多张工作表。工作表名称将以下拉形式出现

我想根据通过列的标题名过滤行数据,这样在定义列之前,行只有值。目前我得到的是整行值

我写了一个这样的逻辑,但这是行不通的

var rowData=[];
for(var i=0;i<headerNames.length;i++){//headerNames contains column names
   for(var j=0;j<data.length;j++){//data contains the rows data
      for(var keyName in data[j])
        if(angular.equals(keyName,headerNames[i])){
           rowData.push({'keyName':data[j][keyName]})//I want only the key,values which matches the column names. I want to set the keyName value as array key but I am not getting its value instead it is coming like keyName:18
        }
      }
   }
}
var rowData=[];

对于(var i=0;i您应该尝试在内部循环中更改为:

var obj = {};
obj[keyName] = data[j][keyName];
rowData.push(obj);
注意:我还对工作表选择做了一些改进,现在上传新文件时默认为第一张工作表。 我还认为您的重置有问题,重置后它不接受新工作簿,它只使用上一个工作簿

//代码在这里
角度.module('app',['ui.grid']))
.controller('MainCtrl',['$scope',函数($scope){
var vm=这个;
vm.gridOptions={};
vm.reset=重置;
vm.selectedSheet='';
vm.sheetIndex=0;
函数重置(){
vm.gridOptions.data=[];
vm.gridOptions.columnDefs=[];
vm.selectedSheet='';
vm.sheetIndex=0;
vm.sheetNames=[];
vm.updateData=null;
}
vm.readSheet=函数(){
var workbook=XLSX.read(vm.data{
键入:“二进制”
});
var headerNames=XLSX.utils.sheet_to_json(workbook.Sheets[workbook.SheetNames[vm.sheetIndex]]{
标题:1
})[0];
vm.sheetNames=workbook.sheetNames;//将工作表名称传递给范围变量
如果(!vm.selectedSheet&&vm.sheetNames&&vm.sheetNames.length>0){
vm.selectedSheet=vm.sheetNames[0];
}
var data=XLSX.utils.sheet_to_json(workbook.Sheets[workbook.SheetNames[vm.sheetIndex]];
变量行=$scope.rowCount;
var col=$scope.columnCount;
如果(列!=未定义(&C列!=“”){
头部名称拼接($scope.columnCount);
}
vm.gridOptions.columnDefs=[];
前厅厅厅(功能(h){
vm.gridOptions.columnDefs.push({
字段:h
});
});
如果(行!=未定义和行!=''){
数据拼接($scope.rowCount);
}
vm.gridOptions.data=数据;
var rowData=[];
对于(变量i=0;i
/*样式在这里*/
身体{
/*字体系列:Verdana*/
填充:20px;
}
.电网{
宽度:100%;
高度:250px;
}
.grid msg覆盖{
位置:绝对位置;
排名:0;
底部:0;
宽度:100%;
背景:rgba(0,0,0,0.4);
}
.grid msg overlay.msg{
不透明度:1;
位置:绝对位置;
最高:20%;
左:20%;
宽度:60%;
身高:50%;
背景色:#eee;
边界半径:4px;
边框:1px实心#555;
文本对齐:居中;
字体大小:24px;
显示:表格;
}
.grid msg overlay.msg>.center{
显示:表格单元格;
垂直对齐:中间对齐;
}
.grid输入[type=“file”]{
字体大小:14px;
显示:内联块;
}

重设网格


选择电子表格文件


专栏: