polar
polar

Reputation: 522

Loop inside loop producing wrong result

I'm having trouble producing a script to match an object's value in object array based on an object's value in a separate array, and retrieve a separate value from that object.

I have used standard for-loops and the current iteration in jQuery each.

I have also tried setting the if statement to look for the two values as ==, but it always produces non matches (or -1).

Can anyone steer me in the right direction here?

transfers = [
  {Package: "1", Origin_Facility = "a"},
  {Package: "2", Origin_Facility = "b"}
];

storeData = [
  {fromPackage: "1,6,26"}
]

  var storeDataEach = function( sx, sxv ) {
    var transfersEach = function( sy, syv ) {
      if(storeData[sx].fromPackage.indexOf(transfers[sy].Package) > -1){
        var facilityStore = transfers[sx].Origin_Facility;
        storeData[sx].origin = facilityStore + " + " + transfers[sy].Package + ' + ' + storeData[sx].fromPackage;
        return false;
      } else {storeData[sx].origin = 'error' + transfers[sy].Package + " + " +  storeData[sx].fromPackage;return false;}

    };

    jQuery.each(transfers, transfersEach);
}
  jQuery.each(storeData, storeDataEach);

Upvotes: 0

Views: 91

Answers (1)

Arun P Johny
Arun P Johny

Reputation: 388316

The main problem is you are returning false from the $.each loop which will stop the iteration

A crude fix is to remove the return from else block

var storeDataEach = function(sx, sxv) {
  var transfersEach = function(sy, syv) {
    if (storeData[sx].fromPackage.indexOf(transfers[sy].Package) > -1) {
      var facilityStore = transfers[sx].Origin_Facility;
      storeData[sx].origin = facilityStore + " + " + transfers[sy].Package + ' + ' + storeData[sx].fromPackage;
      return false;
    } else {
      storeData[sx].origin = 'error' + transfers[sy].Package + " + " + storeData[sx].fromPackage;
    }
  };

  jQuery.each(transfers, transfersEach);
}

But this still have problems with the data structure, in your example you have 26 in the fromPackage, now if you have a package value of 2 that also will return a positive result

Upvotes: 1

Related Questions