Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/410.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript lodash-如果所有值都为空,则从datatable(2D矩阵)中删除列_Javascript_Lodash - Fatal编程技术网

Javascript lodash-如果所有值都为空,则从datatable(2D矩阵)中删除列

Javascript lodash-如果所有值都为空,则从datatable(2D矩阵)中删除列,javascript,lodash,Javascript,Lodash,我有一个像这样的2D矩阵,第一行是列名,其他行是值 var datatable = [ ["a", "b", "c", "d"], //first row are columns names [ 1, 0, null, 3 ], //other rows are values [ 6, null, null, 8 ] ]; 我希望在所有值均为null时删除列,结果如下: var datatable = [ ["a", "b", "d"],

我有一个像这样的2D矩阵,第一行是列名,其他行是值

var datatable = [
  ["a", "b",   "c",   "d"],  //first row are columns names
  [ 1,   0,     null,  3 ],  //other rows are values
  [ 6,   null,  null,  8 ]
];
我希望在所有值均为
null
时删除列,结果如下:

var datatable = [
  ["a", "b",   "d"],  //first row are columns names
  [ 1,   0,     3 ],  //other rows are values
  [ 6,   null,  8 ]
];

行和列的数量可能会有所不同。如果有一种紧凑而快速的方法可以用lodash实现,那就太完美了。

您可以首先获得所有
null
值的列,然后过滤行

var-datatable=[[“a”、“b”、“c”、“d”],[1,0,null,3],[6,null,null,8],
cols=数据表
.slice(1)//省略标题
.reduce((r,a)=>a.map((v,i)=>r[i]| | v!==null),[]);
datatable=datatable.map(a=>a.filter((u,i)=>cols[i]);
console.log(数据表)

.as console wrapper{max height:100%!important;top:0;}
您可以首先获取包含所有
null
值的列,然后过滤行

var-datatable=[[“a”、“b”、“c”、“d”],[1,0,null,3],[6,null,null,8],
cols=数据表
.slice(1)//省略标题
.reduce((r,a)=>a.map((v,i)=>r[i]| | v!==null),[]);
datatable=datatable.map(a=>a.filter((u,i)=>cols[i]);
console.log(数据表)

.as控制台包装{max height:100%!important;top:0;}
代码稍长,但思想类似

var数据表=[
[“a”、“b”、“c”、“d”],
[1,0,null,3],
[6,空,空,8]
];
/*首先创建一个简单的key-val映射,如{a:[1,6],b:[0,null]等,以清除所有为null的键*/
让keyValMap=datatable.reduce((acc、arr、index)=>{
如果(索引==0){
arr.forEach(键=>{
如果(!acc[键])
acc[键]=[]
});
}否则{
Object.keys(acc.map)((key,index)=>acc[key].push(arr[index]);
}
返回acc;
},{});
//现在,只提取那些不是每个元素都为null的键
让validKeys=Object.keys(keyValMap).filter(key=>!keyValMap[key].every(i=>i==null));
//从keyValMap向后旋转基于validKeys的值
让updatedDataTable=[validKeys,…validKeys.map(key=>keyValMap[key])。reduce((acc,val)=>{
val.forEach((elem,i)=>{
如果(!acc[i])acc[i]=[];
acc[i]。推送(元素)
});
返回acc;
},[]) ]

log(updatedDataTable);
代码稍长,但思想类似

var数据表=[
[“a”、“b”、“c”、“d”],
[1,0,null,3],
[6,空,空,8]
];
/*首先创建一个简单的key-val映射,如{a:[1,6],b:[0,null]等,以清除所有为null的键*/
让keyValMap=datatable.reduce((acc、arr、index)=>{
如果(索引==0){
arr.forEach(键=>{
如果(!acc[键])
acc[键]=[]
});
}否则{
Object.keys(acc.map)((key,index)=>acc[key].push(arr[index]);
}
返回acc;
},{});
//现在,只提取那些不是每个元素都为null的键
让validKeys=Object.keys(keyValMap).filter(key=>!keyValMap[key].every(i=>i==null));
//从keyValMap向后旋转基于validKeys的值
让updatedDataTable=[validKeys,…validKeys.map(key=>keyValMap[key])。reduce((acc,val)=>{
val.forEach((elem,i)=>{
如果(!acc[i])acc[i]=[];
acc[i]。推送(元素)
});
返回acc;
},[]) ]
console.log(updatedDataTable);
使用
.flow()
创建一个函数,该函数使用
..unzip()
转换数组,拒绝具有所有
空值的数组,然后将数组解压回原始形式:

const{flow,partiOK:pr,unzip,reject,tail,every,isNull}=\u;//转换为导入
常数fn=流量(
解压,
pr(拒绝、流动(尾部、pr(每个、为空)),
解压,
);
常量数据表=[
[“a”、“b”、“c”、“d”],//第一行是列名
[1,0,null,3],//其他行是值
[6,空,空,8]
];
const result=fn(数据表);
console.log(结果);
使用
.flow()
创建一个函数,该函数使用
..unzip()
转换数组,拒绝包含所有
空值的数组,然后将数组解压回原始形式:

const{flow,partiOK:pr,unzip,reject,tail,every,isNull}=\u;//转换为导入
常数fn=流量(
解压,
pr(拒绝、流动(尾部、pr(每个、为空)),
解压,
);
常量数据表=[
[“a”、“b”、“c”、“d”],//第一行是列名
[1,0,null,3],//其他行是值
[6,空,空,8]
];
const result=fn(数据表);
console.log(结果);

这里是我使用
map()
filter()
some()
的方法

var数据表=[
[“a”、“b”、“c”、“d”],
[1,0,null,3],
[6,空,空,8]
];
设res=datatable.map(
x=>x.filter((\ux,idx)=>datatable.slice(1).some(arr=>arr[idx]!==null))
);

console.log(res);
这里有我使用
map()
filter()和
some()的方法

var数据表=[
[“a”、“b”、“c”、“d”],
[1,0,null,3],
[6,空,空,8]
];
设res=datatable.map(
x=>x.filter((\ux,idx)=>datatable.slice(1).some(arr=>arr[idx]!==null))
);

console.log(res);
因为第二个数组中有一个值,因为该列的所有值都必须为null才能删除第三个列中有
c
。为什么要删除?因为第一行是列名称,它们永远不能为null。如果需要,这就像Excel表格一样……因为第二个数组中有一个值,因为所有值都是null第三列中有
c
。为什么会被删除?因为第一行是列名,它们永远不能为空。如果您想。。。