Heim  >  Fragen und Antworten  >  Hauptteil

javascript – So führen Sie dieselben Schlüsselwerte von Array-Objekten zusammen und fügen die entsprechende ID in ein Array ein

Zum Beispiel alte Daten:
var alt = [

{
    id: 1,
    name: 'css',
    type: 'html'
},
{
    id: 2,
    name: 'css',
    type: 'html'
},
 {
    id: 3,
    name: 'javacript',
    type: 'code'
},
{
    id: 4,
    name: 'javacript',
    type: 'code'
}

]
Die gewünschte Variable new = [

{
    id: [1,2],
    name: 'css',
    type: 'html'
},
 {
    id: [3,4],
    name: 'javacript',
    type: 'code'
},

]
Ich hoffe, Objekte mit demselben Namen zusammenzuführen und die entsprechenden IDs in ein Array einzufügen

ringa_leeringa_lee2672 Tage vor1471

Antworte allen(2)Ich werde antworten

  • 滿天的星座

    滿天的星座2017-06-26 10:59:10

    var hash = {};
    var i = 0;
    var res = [];
    old.forEach(function(item) {
        var name = item.name;
        hash[name] ? res[hash[name] - 1].id.push(item.id) : hash[name] = ++i && res.push({
            id: [item.id],
            name: name,
            type: item.type
        })
    
    });
    console.log(JSON.stringify(res))

    Antwort
    0
  • 怪我咯

    怪我咯2017-06-26 10:59:10

    从下面的数组 old

    var old = [
        {
            id: 1,
            name: 'css',
            type: 'html'
        },
        {
            id: 2,
            name: 'css',
            type: 'html'
        },
         {
            id: 3,
            name: 'javacript',
            type: 'code'
        },
        {
            id: 4,
            name: 'javacript',
            type: 'code'
        }
    ]

    得到 new

    var new = [
        {
            id: [1,2],
            name: 'css',
            type: 'html'
        },
         {
            id: [3,4],
            name: 'javacript',
            type: 'code'
        }
    ]

    实现

    var isEqual = (a, b) => a.name === b.name && b.type === b.type; 
    var create = e => {
        e.id = [e.id]; 
        return e; 
    }
    
    var getNew = old => old.reduce((acc, cur) => {
        let hasItem = acc.some(e => {
            let temp = isEqual(e, cur); 
            if (temp) e.id.push(cur.id); 
            
            return temp; 
        });
        
        if (!hasItem) acc.push(create(cur))
        
        return acc; 
    }, []);

    Antwort
    0
  • StornierenAntwort