Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/425.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/9/csharp-4.0/2.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使用条件合并行_Javascript_Arrays_Algorithm - Fatal编程技术网

Javascript使用条件合并行

Javascript使用条件合并行,javascript,arrays,algorithm,Javascript,Arrays,Algorithm,我需要合并具有以下特定条件的行: 如果行在第0列、第1列、第3列、第4列、第5列中具有相同的值,并且第3列等于特定值(例如17007)->合并,则合并行具有第2列之和 否则,不要合并 我试过这个: const expect=require('chai')。expect //此函数获取一个对象,检查每一行的所有比较列(a、b、c、d、e)的值,如果存在匹配项,则返回一个合并行,其值col(v)=每一旧行v的总和 const mergeRows=(对象、v、…参数)=>{ 常量结果=对象减少((

我需要合并具有以下特定条件的行:

  • 如果行在第0列、第1列、第3列、第4列、第5列中具有相同的值,并且第3列等于特定值(例如17007)->合并,则合并行具有第2列之和
  • 否则,不要合并
我试过这个:

const expect=require('chai')。expect
//此函数获取一个对象,检查每一行的所有比较列(a、b、c、d、e)的值,如果存在匹配项,则返回一个合并行,其值col(v)=每一旧行v的总和
const mergeRows=(对象、v、…参数)=>{
常量结果=对象减少((acc,cur)=>{
const key=params.map(p=>{return`${cur[p]}}).join('|')
//如果键值不匹配
如果(附件[3]=“17007”){
如果(!acc[key])acc[key]=cur
//如果键值匹配
else acc[key][v]=(+acc[key][v]++cur[v])。toString()
}
else acc[键]=电流;
返回acc
}, {})
返回Object.values(结果)
}
常数mergeRowsObj=[
[5400-030'、'15051'、'-77.25'、'17001P'、'ARED'、'ABC'],
[1250-100',15051',230.14',17001P',BGRE',DEF'],
['5400-030','15051','145.5','17007','CBLU','GHI'],
['1250-100','15051','103','17007','DYEL','IJK'],
[1250-100'、'15051'、'-23.4'、'17007'、'DYEL'、'IJK'],
['5400-030','15051','203.5','17007','CBLU','GHI'],
['5400-032','15051','10','17008','CBLU','GHI'],
['5400-032','15051','5','17008','CBLU','GHI'],
['5400-030','15051','125','17007','CBLU','GHI']
]
const mergeRowsResultObj=[
[5400-030'、'15051'、'-77.25'、'17001P'、'ARED'、'ABC'],
[1250-100',15051',230.14',17001P',BGRE',DEF'],
['5400-030','15051','183','17007','CBLU','GHI'],
['1250-100','15051','79.6','17007','DYEL','IJK'],
['5400-032','15051','10','17008','CBLU','GHI'],
['5400-032','15051','5','17008','CBLU','GHI']
]
const mergeRowsResult=mergeRows(mergeRowsObj,2,0,1,3,4,5)
console.log(mergeRowsResult);
描述('mergeRows',()=>{
它('应该返回一个对象,其中合并的行包含特定列的相同值',()=>{
expect(mergeRowsResult).to.deep.equal(mergeRowsResultObj)
})
})
我还尝试修改
reduce()
函数,为第3行的值添加如下条件:

如果(!acc[key]| cur[3]!=='17007')acc[key]=cur

但是它仍然不起作用。

你需要使用
cur
而不是
acc

if (cur[3] === '17007') {
//  ^^^
对于未更改的行,还有另一个唯一的键,在本例中,我将完整的行作为字符串作为键

acc[Object.values(cur).join('|')] = cur;
//  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
const mergeRows=(obj,v,…params)=>{
常量结果=对象减少((acc,cur)=>{
const key=params.map(p=>cur[p]).join(“|”)
if(cur[3]=='17007'){
如果(!acc[key])acc[key]=cur
else acc[key][v]=(+acc[key][v]++cur[v])。toString()
}否则{
acc[对象值(cur).join('|')]=cur;
}
返回acc
}, {})
返回Object.values(结果)
}
常数mergeRowsObj=[
[5400-030'、'15051'、'-77.25'、'17001P'、'ARED'、'ABC'],
[1250-100',15051',230.14',17001P',BGRE',DEF'],
['5400-030','15051','145.5','17007','CBLU','GHI'],
['1250-100','15051','103','17007','DYEL','IJK'],
[1250-100'、'15051'、'-23.4'、'17007'、'DYEL'、'IJK'],
['5400-030','15051','203.5','17007','CBLU','GHI'],
['5400-032','15051','10','17008','CBLU','GHI'],
['5400-032','15051','5','17008','CBLU','GHI'],
['5400-030','15051','125','17007','CBLU','GHI']
]
const mergeRowsResult=mergeRows(mergeRowsObj,2,0,1,3,4,5)
mergeRowsResult.forEach(a=>console.log(…a))

。作为控制台包装{最大高度:100%!重要;顶部:0;}
谢谢@Nina,你又救了我!