对象数组的转置与去重


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
然后基于转换后的数组分别进行合并分组 就行了