-1
votes

Machine de retour JavaScript d'objet imbriqué et organiser des types similaires

Retour de retour JavaScript d'objet imbriqué et organiser des types similaires

J'ai des objets p> xxx pré>

Je souhaite créer une gamme d'objet imbriqué à partir de ce tableau attendu: p> xxx pré>

Je cherche une fonction à ajouter à la carte une par une à la fois p> xxx pré>

Aussi une fonction Supprimer : p>

function addtoArray(collection, object) {
    if (!collection[object.category]) {
        collection[object.category] = [object];
        return;
    }
    if (collection[object.category].includes(object)) return;
    collection[object.category].push(object);
}

function removeFromArray(collection, object) {
    if (!collection[object.category]) return;
    var index = collection[object.category].indexOf(object);
    if (index === -1) return;
    collection[object.category].splice(index, 1);
    if (!collection[object.category].length) delete 
    collection[object.category];
}

var obj1 = { categoryId: 1, category: "Fruits", name:"Orange" },
    obj2 = { categoryId: 1, category: "Fruits", name:"Apple" },
    obj3 = { categoryId: 2, category: "Vegetables", name:"Onion" },
    obj4 = { categoryId: 2, category: "Vegetables", name:"Ginger" },
    collection = {};


0 commentaires

3 Réponses :


1
votes

Fonction pour ajouter au tableau:

var arr=[];

const addToArray=(arr,obj)=>{
  const index=findByName(arr,obj.category);
  if(index>-1){
    arr[i].values.push(obj)
  }else{
    arr.push({
      name:obj.category,
      values:[obj]
    })
  }
}
const findByName=(arr,name)=>{
  for(var i=0;i<arr.length;i++){
    if(arr[i].name===name)
      return i;
  }
  return -1;
}

addToArray(arr,obj1)


1 commentaires

Merci frère cela aide



1
votes

Puisque vous faites diverses recherches sur vos données, la matrice n'est pas la solution recommandée. Vous aurez besoin de la traverser à chaque fois que vous aimeriez sortir un objet. Au lieu de cela, utilisez une classe avec des aides.

La première étape consiste à ajouter des identifiants uniques à vos données: p> xxx pré>

La deuxième partie est la création d'une classe pour contenir ces données et Permettez-vous de le manipuler: P>

const collection = new MyCollection();
collection.add(obj1);
collection.add(obj2);
collection.add(obj3);
collection.removeGroup("Fruits");
collection.items; // {2: { id: 2, categoryId:2, category:"Vegetables", name:"Onion"} }

//or should you desire to return an array
collection.toArray(); // [{ id: 2, categoryId:2, category:"Vegetables", name:"Onion"}]


2 commentaires

Buddy, j'ai besoin de revenir en tant que tableau d'objet. Je veux dire tout ce que vous avez fait dans un objet comment je peux le faire?


J'ai édité ma réponse pour inclure un .toarray () méthode que vous pouvez utiliser.



0
votes

La structure doit-elle être comme celle que vous avez montrée ci-dessus? À mon avis, une structure suivante serait beaucoup plus propre: xxx pré>

avec cette structure, votre code ressemblerait à ceci: p>

{
  Fruits: [
    { categoryId: 1, category: 'Fruits', name: 'Orange' },
    { categoryId: 1, category: 'Fruits', name: 'Apple' }
  ],
  Vegetables: [
    { categoryId: 2, category: 'Vegetables', name: 'Onion' },
    { categoryId: 2, category: 'Vegetables', name: 'Ginger' }
  ]
}


{
  Fruits: [
    { categoryId: 1, category: 'Fruits', name: 'Orange' }
  ],
  Vegetables: [
    { categoryId: 2, category: 'Vegetables', name: 'Onion' },
    { categoryId: 2, category: 'Vegetables', name: 'Ginger' }
  ]
}


1 commentaires

Ni je cherche cette structure