관리 시스템은 우리가 아래와 같이 많은 요구가, 양식 데이터를 병합 할 필요가 충족되는 시간을 많이 할 :
상기 예에서는, 데이터가 평평 할 수있다 수득 유사한 행
[{
'品类':'帽子/针织/长巾',
'配色/尺码':'红褐色/L',
'生产计划数':'800顶',
'纱线':'42支哔哩啪啦',
'颜色':'蓝色',
'重量':'10千克'
},{
'品类':'帽子/针织/长巾',
'配色/尺码':'红褐色/L',
'生产计划数':'800顶',
'纱线':'32支哔哩啪啦',
'颜色':'蓝色',
'重量':'10千克'
},{
'品类':'帽子/针织/长巾',
'配色/尺码':'红褐色/L',
'生产计划数':'800顶',
'纱线':'42支哔哩啪啦',
'颜色':'紫色',
'重量':'10千克'
},{
'品类':'帽子/针织/长巾',
'配色/尺码':'红褐色/L',
'生产计划数':'800顶',
'纱线':'42支哔哩啪啦',
'颜色':'紫色',
'重量':'10千克'
}]
...........
데이터가 통합 될 수있다, 즉 찾기 어려울이 평면 어레이 상기 데이터의 상당한 중복이 있고, 우리는 동일한 데이터 값이 병합 된 부분이다, 예를 들면, 우리는 크기에 따라 그 후, 동일 데이터 종류를 병합하고자 할 수 / 동일한 데이터는 또한 결합 된 색상 ..........
마지막으로 우리는 폼을 표시 할 필요가의 합병 후 다층 구조의 객체를 얻는다.
여기에 아래의 예에서 볼 수 필요가 이차원 코드의 왼쪽 모서리 상단을 청소 할 수 있습니다 논의 할 코드의 뒤쪽 부분은, 몇 가지 생각을 주석으로이 데이터를 병합 할 수 있습니다 플랫 기능을 제공합니다
<script type="text/javascript">
let json = [{
sex:'女',
name:'女1号',
from:'中国'
},{
sex:'女',
name:'女2号',
from:'中国'
},{
sex:'女',
name:'女3号',
from:'韩国'
},{
sex:'男',
name:'男1号',
from:'中国'
},{
sex:'男',
name:'男2号',
from:'韩国'
},{
sex:'男',
name:'男3号',
from:'美国'
},{
sex:'男',
name:'男4号',
from:'中国'
}]
function jsonMerge(jsonArr,keyArr){
let newJson = [] //合并好的数据都放在这个数组里
jsonArr.forEach((itemJson,indexJson)=>{
let mark = -1
let finded = newJson.find((itemFind, indexFind) => {
if (itemFind[keyArr[0]] === itemJson[keyArr[0]]) {
mark = indexFind
return itemFind[keyArr[0]] === itemJson[keyArr[0]]
}
})
if(!finded){
let value = {}
value[keyArr[0]] = itemJson[keyArr[0]]
value['info'] = []
let info = {}
for(let i in itemJson){
if(i!==keyArr[0]){
info[i] = itemJson[i]
}
}
value['info'].push(info)
newJson.push(value)
}else{
let info = {}
for(let i in itemJson){
if(i!==keyArr[0]){
info[i] = itemJson[i]
}
}
newJson[mark]['info'].push(info)
}
})
// 递归的条件是不断的缩减keyArr的length,每次都去除第零个,直到为0
if(keyArr.length === 1){
return newJson
}else{
return newJson.map((itemInfo)=>{
let newKeyArr = []
keyArr.forEach((item,index)=>{
if(index>0){
newKeyArr.push(item)
}
})
return{
[keyArr[0]]:itemInfo[keyArr[0]],
'info':jsonMerge(itemInfo['info'],newKeyArr)
}
})
}
}
console.log(jsonMerge(json,['sex','from']))
// function jsonMerge(jsonArr,key,newKey){
// let json = jsonArr
// let newJson = []
// json.forEach((item,index)=>{
// let mark = -1
// let finded = newJson.find((itemFind,indexFind)=>{
// if(itemFind[key]===item[key]){
// mark = indexFind
// return itemFind[key]===item[key]
// }
// })
// if(!finded){
// let value = {}
// value[key] = item[key]
// value[newKey] = []
// let itemJson = {}
// for(i in item){
// if(i!==key){
// itemJson[i] = item[i]
// }
// }
// value[newKey].push(itemJson)
// newJson.push(value)
// }else{
// let itemJson = {}
// for(i in item){
// if(i!==key){
// itemJson[i] = item[i]
// }
// }
// newJson[mark][newKey].push(itemJson)
// }
// })
// return newJson
// }
// let sexMerge = jsonMerge(json,'sex','arr')
// let fromMerge = jsonMerge(json,'from','arr')
// console.log(sexMerge,fromMerge)
/*
目前能根据单个key进行合并,如我需要合并key值sex,就可以得到
json = [{
sex:'女',
info:[{
name:'女一号',
from:'中国'
},{
name:'女二号',
from:'中国'
} ...]
},{
sex:'男',
info:[{
name:'男一号',
from:'中国'
},{
name:'男二号',
from:'韩国'
} ...]
}]
我想实现的效果,根据多个key进行合并,如我先合并key值sex相同的数据,再合并from相同的数据
json = [{
sex:'女',
info:[{
from:'中国',
info:[{
name:'女1号'
},{
name:'女2号'
}...]
},{
sex:'女',
info:[{
from:'韩国',
info:[{
name:'女3号'
},{
name:'女4号'
}...]
}]
*/
</script>
다음과 같이 최종 결과는