-1
votes

Comment comparer les tableaux et créer un tableau final en utilisant JS?

J'ai deux gares d'objets qu'ils sont:

objet 1: xxx

objet 2: [
{
"SKU": "30772", "Qté": "1" }, {
"Position": "Bras de position à gauche", "Tech": "Broderie" }, {
"Position": "Positionnez la poitrine", "Tech": "ScreenPrint Textile" } ]

objet 2: xxx

J'ai besoin de comparer les paramètres d'objet à savoir la position et la technologie et devez obtenir le tableau final dans lequel cette position et objet disponible comme ci-dessous

sortie finale: xxx


4 commentaires

Le premier objet et l'objet final sont exactement les mêmes sauf que le nom de positionnement clé est modifié en position. Est-ce que quelque chose que vous voulez? Remplacer le nom de position par position Si la position et la position nom correspondent dans les deux objets?


Désolé j'ai édité ma question..juste une erreur négligente.


Donc maintenant, la sortie finale ne doit contenir que la correspondance de position dans l'objet 1 et l'objet 2, non?


oui l'objet correspondant d'objet 2 dans l'objet 1 devrait revenir


3 Réponses :


1
votes

Essayez ceci, je pense que cela vous aidera à obtenir la réponse de votre désir.

const object1 = [  
   {  
      "id":"30772",
      "posimage":"/b/l/blue-shirt_1_1.jpg",
      "position":"Position Chest",
      "tech":"Embroidery"
   },
   {  
      "id":"30772",
      "posimage":"/b/l/blue-shirt_1_1.jpg",
      "position":"Position Chest",
      "tech":"Screenprint Textile"
   },
   {  
      "id":"30772",
      "posimage":"/b/l/blue-shirt_1_1.jpg",
      "position":"Position Arm Left",
      "tech":"Embroidery"
   },
   {  
      "id":"30772",
      "posimage":"/b/l/blue-shirt_1_1.jpg",
      "position":"Position Arm Left",
      "tech":"Screenprint Textile"
   }
];

const object2 = [  
   {  
      "position":"Position Arm Left",
      "tech":"Embroidery"
   },
   {  
      "position":"Position Chest",
      "tech":"Screenprint Textile"
   }
];

const findObject = object1.filter(obj1 => {
  const mathObject = object2.find(obj2 => {
    return obj2.tech === obj1.tech && obj2.position === obj1.position;
  });
  return mathObject;
});

console.log(findObject);


0 commentaires

1
votes

Essayez ceci:

Le code est assez explicite auto-explicite. P>

EDIT: strong> Le code est maintenant plus efficace, nous déterminons la longueur des deux Tableaux et exécutez la boucle avec moins de nombre d'objets. strong> p>

p>

var obj1 =   [  
   {  
      "id":"30772",
      "posimage":"/b/l/blue-shirt_1_1.jpg",
      "position":"Position Chest",
      "tech":"Embroidery"
   },
   {  
      "id":"30772",
      "posimage":"/b/l/blue-shirt_1_1.jpg",
      "position":"Position Chest",
      "tech":"Screenprint Textile"
   },
   {  
      "id":"30772",
      "posimage":"/b/l/blue-shirt_1_1.jpg",
      "position":"Position Arm Left",
      "tech":"Embroidery"
   },
   {  
      "id":"30772",
      "posimage":"/b/l/blue-shirt_1_1.jpg",
      "position":"Position Arm Left",
      "tech":"Screenprint Textile"
   }
]

var obj2 = [  
   {  
      "position":"Position Arm Left",
      "tech":"Embroidery"
   },
   {  
      "position":"Position Chest",
      "tech":"Screenprint Textile"
   }
]

const doer = (ob1, ob2) => {
  
  let final = [];
  ob1.map((one) => {
    // let tobepushed = one.hasOwnPropery('id') ? one : two;
    ob2.map(two => {
      if(two.hasOwnProperty('position') && 
          two.hasOwnProperty('tech') && 
          two['position'] === one['position'] && 
          two['tech'] === one['tech']
        ) {
        final.push('id' in one ? one : two);
      }
    })
  })

  return final;
}

let l1 = obj1.length;
let l2 = obj2.length

if(l1 < l2) {
  console.log(doer(obj2, obj1))
} else if (l2 < l1) {
  console.log(doer(obj1, obj2))
}

// console.log(doer(obj2, obj1))


0 commentaires

2
votes

Si vous utilisez Lodash, vous pouvez utiliser intersectionwith code> méthode car il est intuitif que vous souhaitez une interespection basée sur deux touches.

p>

<script src="https://cdn.jsdelivr.net/npm/lodash@4.17.15/lodash.min.js"></script>


0 commentaires