const arr = [
{chr: 'A', nanjing: 'a', beijing: 'b', shanghai: 'c'},
{chr: 'B', nanjing: 'b', beijing: 'c', shanghai: 'c'},
{chr: 'C', nanjing: 'b', beijing: 'd', shanghai: 'e'},
{chr: 'D', nanjing: 'c', beijing: 'd', shanghai: 'a'},
{chr: 'E', nanjing: 'e', beijing: 'e', shanghai: 'a'},
{chr: 'F', nanjing: 'a', beijing: 'c', shanghai: 'e'},
{chr: 'G', nanjing: 'e', beijing: 'a', shanghai: 'b'},
{chr: 'H', nanjing: 'f', beijing: 'e', shanghai: 'd'}
]
const nanjing = [
{type:"a",chr:"A,F"},
{type:"b",chr:"B,C"},
{type:"c",chr:"D"},
{type:"e",chr:"E,G"},
{type:"f",chr:"H"}
]
const beijing =[...]
const shanghai =[...]
如何能从arr中筛选出像 nanjing这样的数组。
请指教,谢谢!
const arr = [
{chr: 'A', nanjing: 'a', beijing: 'b', shanghai: 'c'},
{chr: 'B', nanjing: 'b', beijing: 'c', shanghai: 'c'},
{chr: 'C', nanjing: 'b', beijing: 'd', shanghai: 'e'},
{chr: 'D', nanjing: 'c', beijing: 'd', shanghai: 'a'},
{chr: 'E', nanjing: 'e', beijing: 'e', shanghai: 'a'},
{chr: 'F', nanjing: 'a', beijing: 'c', shanghai: 'e'},
{chr: 'G', nanjing: 'e', beijing: 'a', shanghai: 'b'},
{chr: 'H', nanjing: 'f', beijing: 'e', shanghai: 'd'}
]
let data = Object.keys(arr[0]).filter(item => item != 'chr')
.reduce((total, item) => {
let resultMap = arr.reduce((total2, item2) => {
let total2Element = total2[item2[item]];
if (!total2Element) {
total2[item2[item]] = []
}
total2[item2[item]].push(item2.chr)
return total2
}, {});
let result = Object.keys(resultMap).reduce((total2, item2) => {
total2.push({type: item2, chr: resultMap[item2].join(',')})
return total2
}, []);
total[item] = result
return total
}, {});
console.log(data)
着急吗?
是想要方案,还是想要答案?
生名三个空数组,对arr遍历,map
三个空数组接,判断 类型item.nanjing等于a,就把结果push到空数组的chr然后数组转字符串,type为a
以此类推
遍历arr数组,分为三组 数组对象的1,2 表示 南京的数据 ,1,3 表示北京的数据 ,1,4 表示 上海的数据
然后定义三个数组
循环换遍历 三个转换数组格式为 {“A","a"}第一个元素表示 chr 第二个A表示 城市的code
然后基于转换后的数组分别进行合并分组 就行了