Oblicion A
Oblicion A

Reputation: 187

Arrays and objects and javascript map

I have a problem. I have this array that I want to convert to an object with dynamic data.

this is the function

const prodSheet2 = prodSheet.map(da => 
                   ({ Artikelnummer: da[0], 
                        Benämning: da[1],
                        AnnanBemäning: da[2],
                        Kortnman: da[3],
                        Artikelgrupp: da[4]}))

and this expels data as:

    0 : {Artikelnummer: 100010, Benämning: aaa, AnnaBenämning: aaa, Kortnamn: a, Artikelgrupp:101}
    1 : {Artikelnummer: 100011, Benämning: aaa, AnnaBenämning: aaa, Kortnamn: b, Artikelgrupp:101}

but I wanted it to be like:

    100010 : {Artikelnummer: 100010, Benämning: aaa, AnnaBenämning: aaa, Kortnamn: a, Artikelgrupp:101}
    100011 : {Artikelnummer: 100011, Benämning: aaa, AnnaBenämning: aaa, Kortnamn: b, Artikelgrupp:101}

I have been trying different ways but cannot figure out. I am writing this in ReactJs

Upvotes: 0

Views: 71

Answers (5)

Nina Scholz
Nina Scholz

Reputation: 386776

You could reduce the array and get a single object with Artikelnummer as key for the item informations.

const prodSheet2 = prodSheet.reduce((o, da) =>({
    ...o,
    [da[0]]: {
        Artikelnummer: da[0],
        'Benämning': da[1],
        'AnnanBemäning': da[2],
        Kortnman: da[3],
        Artikelgrupp: da[4]
   }
}), {});

Upvotes: 1

Ryan Searle
Ryan Searle

Reputation: 1627

This will work.

 const prodSheet2 = prodSheet.reduce((acc, next) => {
    return { 
        ...acc,
        [next[0]]: {
            Artikelnummer: next[0],
            Benämning: next[1],
            AnnanBemäning: next[2],
            Kortnman: next[3],
            Artikelgrupp: next[4]
        }
    };
 }, {});

Upvotes: 0

Nguyễn Văn Phong
Nguyễn Văn Phong

Reputation: 14228

You can use ES6 spread & Object.assign like below

var prodSheet = 
[
  [100010, "aaa", "aaa", "a", 101],
  [100011, "aaa", "aaa", "b", 101]
];
var result2 = Object.assign({}, ...prodSheet.map(da => ({[da[0]]: { Artikelnummer: da[0], 
                    Benämning: da[1],
                    AnnanBemäning: da[2],
                    Kortnman: da[3],
                    Artikelgrupp: da[4]}})));

                    
console.log(result2);

Upvotes: 1

Ashkan
Ashkan

Reputation: 272

    const prodSheet2 = prodSheet.map(da => {
        var key = da[0]
        var obj = {}
        obj[key] = {
            da : { 
                Artikelnummer: da[0], 
                Benämning: da[1],
                AnnanBemäning: da[2],
                Kortnman: da[3],
                Artikelgrupp: da[4]
            }
        }
        return obj
    })

Upvotes: 0

khierl
khierl

Reputation: 635

 const prodSheet2 = prodSheet.map(da => 
               ([da[0]]:{ Artikelnummer: da[0], 
                    Benämning: da[1],
                    AnnanBemäning: da[2],
                    Kortnman: da[3],
                    Artikelgrupp: da[4]}))

try this or check the js computed value

Upvotes: 1

Related Questions