0

I have one array with response like this:

let firstArray = {
        "TEST0":[
                    "App",
                    "Desktop",
                    "Mobile"
        ],
        TEST1": [
                    "BEVERAGES",
                    "CLOTHING, PERSONAL ACCESSORIES AND RELATED PRODUCTS"
        ]
    }

And I have array of objects like this:

 let secondArray =  [
        {
            created: "2019-05-28T11:13:55.000"
            createdBy: ""
            displayname: "BEVERAGES"
            docname: "BEVERAGES"
            id: 1
            name: "BEVERAGES"
            purposeCode: "P"
            responsible: (2) [{…}, {…}]
            shortname: "BEVERAGES"
            status: "Active"
        },
        {
            created: "2019-05-28T11:13:55.000"
            createdBy: ""
            displayname: "CLOTHING, PERSONAL ACCESSORIES AND RELATED PRODUCTS"
            docname: "CLOTHING, PERSONAL ACCESSORIES AND RELATED PRODUCTS"
            id: 2
            name: "CLOTHING, PERSONAL ACCESSORIES AND RELATED PRODUCTS"
            purposeCode: "P"
            responsible: []
            shortname: "CLOTHING, PERSONAL ACCESSORIES AND RELATED PRODUCTS"
            status: "Active"
        }
    ]

I want to check where that displayname from second array belongs in first array, and group them BY KEYS like that

For example :

if i have BEVERAGES, APP, and so i will have structure like this:

{
    "TEST0":[   
                "App",
                "Desktop",
                "Mobile"
    ],
    TEST1": [
                "BEVERAGES":[
                {
                    created: "2019-05-28T11:13:55.000"
                    createdBy: ""
                    displayname: "BEVERAGES"
                    docname: "BEVERAGES"
                    id: 1
                    name: "BEVERAGES"
                    purposeCode: "P"
                    responsible: (2) [{…}, {…}]
                    shortname: "BEVERAGES"
                    status: "Active"
                }
            ]

    ]
}

My question is different because i have two arrays and not one, where i want to make one array and group second array by keys from first array

None
  • 8,817
  • 26
  • 96
  • 171
  • There its only one array and he want to group, i have two arrays where i need to compare them and them group by keys – None Sep 04 '19 at 13:52

3 Answers3

1
const newData = {}

Object.keys(firstArray).forEach(key => {
  newData[key] = firstArray[key].map(e => secondArray.find(i => i.displayname === e) || e);
})

console.log(newData);

https://stackblitz.com/edit/js-xptrh5?file=index.js

Hsuan Lee
  • 2,300
  • 1
  • 10
  • 18
0

Here is the solution of your problem:

    var test = {
    TEST0:[
                "App",
                "Desktop",
                "Mobile"
    ],
    TEST1: [
                "BEVERAGES",
                "CLOTHING, PERSONAL ACCESSORIES AND RELATED PRODUCTS"
    ]
}
var arr = [
    {
        created: "2019-05-28T11:13:55.000",
        createdBy: "ZIRA",
        displayname: "BEVERAGES",
        docname: "BEVERAGES",
        id: 1,
        name: "BEVERAGES",
        purposeCode: "P",
        responsible: "(2) [{…}, {…}]",
        shortname: "BEVERAGES",
        status: "Active"
    },
    {
        created: "2019-05-28T11:13:55.000",
        createdBy: "ZIRA",
        displayname: "CLOTHING, PERSONAL ACCESSORIES AND RELATED PRODUCTS",
        docname: "CLOTHING, PERSONAL ACCESSORIES AND RELATED PRODUCTS",
        id: 2,
        name: "CLOTHING, PERSONAL ACCESSORIES AND RELATED PRODUCTS",
        purposeCode: "P",
        responsible: "[]",
        shortname: "CLOTHING, PERSONAL ACCESSORIES AND RELATED PRODUCTS",
        status: "Active",
    }
]
var newArr = []
var count = 0
for (let [key, value] of Object.entries(test)) {
  if(value.length){
    console.log(value);
    jsObj1 = {};

    value.forEach(function(singleKey , index){
        arr.forEach(function(singleObject){
            if(singleObject.name == singleKey){
 var jsObj1 = {};
                        var jsObj = {};//newArr[count] = {
              jsObj[singleKey] = singleObject;
                            //newArr.push(jsObj);
                        jsObj1[key] = jsObj;
                        newArr.push(jsObj1);  

            }
        });

    });
  }
}
console.log(newArr);

In newArr, you will get your desired array.

halfer
  • 19,824
  • 17
  • 99
  • 186
Pushprajsinh Chudasama
  • 7,772
  • 4
  • 20
  • 43
0

Try this

const result = {};
for (let testName of Object.keys(response1)) {
  if (response1.hasOwnProperty(testName)) {
     for (let i = 0; i < response1[testName].length; i++) {
      const key = response1[testName][i];
      result[key] = response2.filter(el => key === el.displayname)
     }
  }

}

console.log(result)
Mike
  • 801
  • 4
  • 7