Home > other >  Compare 3 arrray and find combination in javascript
Compare 3 arrray and find combination in javascript

Time:10-05

I have 3 arrays as below

A: [
{
  "label": "100Watts",
  "value": "100Watts",
},
{
  "label": "135Watts",
  "value": "135Watts",
}  ]


B: [
{
"label": "Large|100cm",
"value": "Large|100cm"
},
{
"label": "Small|125mm",
"value": "Small|125mm"
}
]


C: [
{
  "label": "Black",
  "value": "Black",
},
{
  "label": "Black",
  "value": "Black",
}
]

I have one master array as below

 result:[
  { 
    "x_powerConsumption": "100Watts",
    "x_size": "Small|125mm",
    "x_color": "Black",
  },
  {
    "x_powerConsumption": "135Watts",
    "x_size": "Large|100cm",
    "x_color": "Black",
  }
  ] 

My code as below

let newArray = A.filter(o1 => result.some(o2 => o1.label === o2.x_size));
let newArray2 = B.filter(o1 => result.some(o2 => o1.label === o2.x_powerConsumption));
                this.setState({selectedVarientOne: newArray[0].label, selectedVarientTwo:newArray2[0].label})

But my requirement is i need combination as below like

Output : Black --> 100Watts --> Small|125mm

But as per my above code it is coming like Black --> 100Watts --> Large|100mm

Can anyone tell me how i can solve this?

CodePudding user response:

Ok, I'm assuming that you want to match the array of objects to the main object

I just use a nest of for loops to see if values from an array(A,B, or C) match up with values from the main object(result) from only the important keys in the result object of course

var A=[{"label":"100Watts","value":"100Watts"},{"label":"135Watts","value":"135Watts"}]
var B=[{"label":"Large|100cm","value":"Large|100cm"},{"label":"Small|125mm","value":"Small|125mm"}]


//now for function to correlate data(sry for late answer was afk lol)
function attribute(arr,result){
  const necessary_keys=["x_powerConsumption","x_size","x_color"]
  var toReturn=[] //array with output to return
  for(let i=0;i<arr.length;i  ){
    var arrValues=Object.values(arr[i]) //eg: A[0] would be ["100Watts","100Watts"]
    
    for(let j=0;j<result.length;j  ){
      var resultValues=Object.keys(result[j])
      .filter(key=>necessary_keys.includes(key))
      .map(key=>result[j][key]) //result[0] would be ["100Watts","Small|125mm","Black"]
      
      if(resultValues.some(value=>arrValues.includes(value))){
        toReturn[i]=resultValues //["100Watts","Small|125mm","Black"] for arr[0]
      }
      
    }
    
  }
  return toReturn //all indexes with undefined dont correlate with result in any of its values
}


//now to use the function
let newArray=attribute(A,result)
let newArray2=attribute(B,result)

console.log("values from A:",newArray)
console.log("values from B:",newArray2)
<script>
var result=[
  {
 "dynamicPropertyMapLong": {
  "sku-Equipment_x_color": 1,
  "sku-Equipment_x_size": 1,
  "sku-Equipment_x_powerConsumption": 3
 },
"x_UAE_installationPrice": 0,
"bundleLinks": [],
"largeImage": null,
"smallImage": null,
"listVolumePrice": null,
"onlineOnly": false,
"listPrices": {
  "aed": 100,
  "loyaltyProgram": null
},
"configurationMetadata": [],
"largeImageURLs": [],
"x_skuCreationDate": null,
"productLine": null,
"listVolumePrices": {
  "aed": null,
  "loyaltyProgram": null
},
"derivedSalePriceFrom": "aed",
"model": null,
"x_powerConsumption": "100Watts",
"barcode": null,
"salePriceEndDate": null,
"images": [],
"unitOfMeasure": null,
"primaryMediumImageURL": null,
"dynamicPropertyMapBigString": {},
"active": true,
"x_promotionDetails": "5 Percent Off: 5OFF5",
"thumbImageURLs": [],
"mediumImageURLs": [],
"primarySourceImageURL": null,
"x_description": null,
"sourceImageURLs": [],
"primarySmallImageURL": null,
"x_autoShipPrice": 0,
"productFamily": null,
"primaryThumbImageURL": null,
"nonreturnable": false,
"x_loyaltyLevel": "LEVEL2",
"displayName": "Three variant sku1",
"salePrices": {
  "aed": null,
  "loyaltyProgram": null
},
"primaryFullImageURL": null,
"productListingSku": null,
"primaryLargeImageURL": null,
"derivedOnlineOnly": false,
"smallImageURLs": [],
"thumbnailImage": null,
"saleVolumePrices": {
  "aed": null,
  "loyaltyProgram": null
},
"x_size": "Small|125mm",
"saleVolumePrice": null,
"salePriceStartDate": null,
"quantity": null,
"salePrice": null,
"fullImageURLs": [],
"x_isonSale": "Y",
"variantValuesOrder": {},
"x_color": "Black",
"soldAsPackage": true,
"listingSKUId": null,
"x_SAR_installationPrice": 0,
"repositoryId": "300003-1",
"derivedListPriceFrom": "aed",
"x_installationPrice": 0,
"x_costPrice": null,
"configurable": false,
"listPrice": 100
 },
{
"dynamicPropertyMapLong": {
  "sku-Equipment_x_color": 1,
  "sku-Equipment_x_size": 2,
  "sku-Equipment_x_powerConsumption": 1
},
"x_UAE_installationPrice": 0,
"bundleLinks": [],
"largeImage": null,
"smallImage": null,
"listVolumePrice": null,
"onlineOnly": false,
"listPrices": {
  "aed": 135,
  "loyaltyProgram": null
},
"configurationMetadata": [],
"largeImageURLs": [],
"x_skuCreationDate": null,
"productLine": null,
"listVolumePrices": {
  "aed": null,
  "loyaltyProgram": null
},
"derivedSalePriceFrom": "aed",
"model": null,
"x_powerConsumption": "135Watts",
"barcode": null,
"salePriceEndDate": null,
"images": [],
"unitOfMeasure": null,
"primaryMediumImageURL": null,
"dynamicPropertyMapBigString": {},
"active": true,
"x_promotionDetails": "5 Percent Off: 5OFF5",
"thumbImageURLs": [],
"mediumImageURLs": [],
"primarySourceImageURL": null,
"x_description": null,
"sourceImageURLs": [],
"primarySmallImageURL": null,
"x_autoShipPrice": 0,
"productFamily": null,
"primaryThumbImageURL": null,
"nonreturnable": false,
"x_loyaltyLevel": "LEVEL2",
"displayName": "sku3",
"salePrices": {
  "aed": null,
  "loyaltyProgram": null
},
"primaryFullImageURL": null,
"productListingSku": null,
"primaryLargeImageURL": null,
"derivedOnlineOnly": false,
"smallImageURLs": [],
"thumbnailImage": null,
"saleVolumePrices": {
  "aed": null,
  "loyaltyProgram": null
},
"x_size": "Large|100cm",
"saleVolumePrice": null,
"salePriceStartDate": null,
"quantity": null,
"salePrice": null,
"fullImageURLs": [],
"x_isonSale": "Y",
"variantValuesOrder": {},
"x_color": "Black",
"soldAsPackage": true,
"listingSKUId": null,
"x_SAR_installationPrice": 0,
"repositoryId": "300003-3",
"derivedListPriceFrom": "aed",
"x_installationPrice": 0,
"x_costPrice": null,
"configurable": false,
"listPrice": 135
}
]
</script>

CodePudding user response:

Assuming the other answer is correct, here is a shorter version:

result.map(({x_powerConsumption, x_size, x_color}) => ([
  A.find(el => el.label === x_powerConsumption).value,
  B.find(el => el.label === x_size).value,
  C.find(el => el.label === x_color).value
]))

Example:

const A = [{ "label": "100Watts", "value": "100Watts" }, { "label": "135Watts", "value": "135Watts" }];
const B = [{ "label": "Large|100cm", "value": "Large|100cm" }, { "label": "Small|125mm", "value": "Small|125mm" }];
const C = [{ "label": "Black", "value": "Black" }, { "label": "Black", "value": "Black" }];

const result = [
  { "x_powerConsumption": "100Watts", "x_size": "Small|125mm", "x_color": "Black" },
  { "x_powerConsumption": "135Watts", "x_size": "Large|100cm", "x_color": "Black" }
];

console.log(result.map(({x_powerConsumption, x_size, x_color}) => ([
  A.find(el => el.label === x_powerConsumption).value,
  B.find(el => el.label === x_size).value,
  C.find(el => el.label === x_color).value
])));

  • Related