duplicate validator logic

by jacobwsmith

JavaScript

console.clear();

function getKeyObjHelper({
  site,
  placementId,
  creativeId
}) {
  return {
    placementId: placementId.toLowerCase(),
    site: site.toLowerCase(),
    key: site.toLowerCase() + placementId.toLowerCase() + creativeId.toLowerCase()
  }
}

function duplicateValidator(item, index, arr) {
  const currentKeyObj = getKeyObjHelper(item);

  // compare current to array
  const isUnique = arr.every((res, i) => {
    const compareKeyObj = getKeyObjHelper(res);
    if (i === index) {
      return true;
    }
    if (currentKeyObj.placementId !== compareKeyObj.placementId) {
      return true;
    }
    // if on the same site with different creativeIds
    if (currentKeyObj.site === compareKeyObj.site && currentKeyObj.key !== compareKeyObj.key) {
      return true
    }
    return false;
  })
  return !isUnique;
}

// Test 1
{
  const testData = [{
    site: 'site1',
    placementId: 'pl1',
    creativeId: 'ad1'
  }, {
    site: 'site2',
    placementId: 'PL1',
    creativeId: 'ad'
  }];
  console.log(duplicateValidator(testData[0], 0, testData));
}
// Test 2
{
  const testData = [{
    site: 'site1',
    placementId: 'pl1',
    creativeId: 'ad1'
  }, {
    site: 'site1',
    placementId: 'PL1',
    creativeId: 'ad2'
  }];
  console.log(duplicateValidator(testData[0], 0, testData));
}