-
-
Save deltabravozulu/680452c7d6bb96de0ae0872279d10fd7 to your computer and use it in GitHub Desktop.
Find an average sold price of an eBay search.Do a search for a product, check the "Sold listings" option under "Show only" in the left navigation.Run this script by pasting it into the console tab of the chrome developer tools.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// var priceCells = document.querySelectorAll('.s-item__price'); //returns a list with all the elements that have class 'priceCell' | |
let priceCells = document.querySelectorAll('#srp-river-results > ul > li > div > div.s-item__info.clearfix > div.s-item__details.clearfix > div:nth-child(1) > span > span') | |
sp = [] | |
const length = priceCells.length | |
function soldPriceArray() { | |
for (let i = 0; i < length; i++) { | |
let soldPrice = parseFloat(priceCells[i].innerText.trim().replace('$', '').replace(',', '')) | |
sp.push(soldPrice) | |
} | |
} | |
function salesMean(numbersArray) { | |
let total = 0 | |
let i | |
for (i = 0; i < numbersArray.length; i += 1) { | |
total += numbersArray[i] | |
} | |
return total / numbersArray.length | |
} | |
function salesDev(numbersArray) { | |
// Creating the mean with Array.reduce | |
let mean = numbersArray.reduce((acc, curr) => { | |
return acc + curr | |
}, 0) / numbersArray.length | |
// Assigning (value - mean) ^ 2 to every numbersArrayay item | |
numbersArray = numbersArray.map((k) => { | |
return (k - mean) ** 2 | |
}) | |
// Calculating the sum of updated numbersArrayay | |
let sum = numbersArray.reduce((acc, curr) => acc + curr, 0) | |
// Calculating the variance | |
let variance = sum / numbersArray.length | |
// Returning the Standard deviation | |
// return Math.sqrt(sum / numbersArray.length) | |
return Math.sqrt(variance) | |
} | |
function salesMode(numbersArray) { | |
let uniques = Array.from(new Set(numbersArray)).map(r => [r, 0]) | |
if (uniques.length === numbersArray.length) { return Math.min(...numbersArray) } | |
for (q in numbersArray) { | |
for (j in uniques) { | |
if (numbersArray[q] === uniques[j][0]) { | |
uniques[j][1] += 1 | |
} | |
} | |
} | |
uniques.sort((a, b) => b[1] - a[1]) | |
return uniques[0][0] | |
} | |
function salesMedian(numbersArray) { | |
// median of [3, 5, 4, 4, 1, 1, 2, 3] = 3 | |
let median = 0 | |
let numsLen = numbersArray.length | |
numbersArray.sort() | |
if ( | |
numsLen % 2 === 0 // is even | |
) { | |
// average of two middle numbersArray | |
median = (numbersArray[numsLen / 2 - 1] + numbersArray[numsLen / 2]) / 2 | |
} else { // is odd | |
// middle number only | |
median = numbersArray[(numsLen - 1) / 2] | |
} | |
return median | |
} | |
function salesRange() { | |
let rangeMaximum = Math.max.apply(Math, sp) | |
let rangeMinimum = Math.min.apply(Math, sp) | |
return [rangeMaximum, rangeMinimum] | |
} | |
soldPriceArray() | |
let rangeMaximum = salesRange()[0].toFixed(2) | |
let rangeMinimum = salesRange()[1].toFixed(2) | |
let mean = salesMean(sp).toFixed(2) | |
let standardDeviation = salesDev(sp).toFixed(2) | |
let median = salesMedian(sp).toFixed(2) | |
let mode = salesMode(sp).toFixed(2) | |
console.log('Maximum Value: ' + rangeMaximum, 'Minimum Value: ' + rangeMinimum, 'Average Value: ' + mean, 'Standard Deviation: ' + standardDeviation, 'Median Value: ' + median, 'Most Common Value: ' + mode) | |
let message = 'Range: $' + rangeMinimum + '-$' + rangeMaximum + '\n' | |
message += 'Median: $' + median + '\n' | |
message += 'Mode: $' + mode + '\n' | |
message += 'Mean: $' + mean + '\n' | |
message += 'Standard Deviation: $' + standardDeviation + '\n' | |
let goodDeal = 0.5 | |
message += 'Mean minus ' + goodDeal * 100 + '% standard deviation (good deal): $' + (mean - (standardDeviation * goodDeal)).toFixed(2) + '\n' | |
message += 'Mean minus one standard deviation (great deal): $' + (mean - standardDeviation).toFixed(2) | |
alert(message) | |
//bookmarklet: | |
//javascript:(function()%7B%2F%2F%20var%20priceCells%20%3D%20document.querySelectorAll('.s-item__price')%3B%20%2F%2Freturns%20a%20list%20with%20all%20the%20elements%20that%20have%20class%20'priceCell'%0Alet%20priceCells%20%3D%20document.querySelectorAll('%23srp-river-results%20%3E%20ul%20%3E%20li%20%3E%20div%20%3E%20div.s-item__info.clearfix%20%3E%20div.s-item__details.clearfix%20%3E%20div%3Anth-child(1)%20%3E%20span%20%3E%20span')%0Asp%20%3D%20%5B%5D%0Aconst%20length%20%3D%20priceCells.length%0A%0Afunction%20soldPriceArray()%20%7B%0A%20%20%20%20for%20(let%20i%20%3D%200%3B%20i%20%3C%20length%3B%20i%2B%2B)%20%7B%0A%20%20%20%20%20%20%20%20let%20soldPrice%20%3D%20parseFloat(priceCells%5Bi%5D.innerText.trim().replace('%24'%2C%20'').replace('%2C'%2C%20''))%0A%20%20%20%20%20%20%20%20sp.push(soldPrice)%0A%20%20%20%20%7D%0A%7D%0A%0Afunction%20salesMean(numbersArray)%20%7B%0A%20%20%20%20let%20total%20%3D%200%0A%20%20%20%20let%20i%0A%20%20%20%20for%20(i%20%3D%200%3B%20i%20%3C%20numbersArray.length%3B%20i%20%2B%3D%201)%20%7B%0A%20%20%20%20%20%20%20%20total%20%2B%3D%20numbersArray%5Bi%5D%0A%20%20%20%20%7D%0A%20%20%20%20return%20total%20%2F%20numbersArray.length%0A%7D%0A%0Afunction%20salesDev(numbersArray)%20%7B%0A%20%20%20%20%2F%2F%20Creating%20the%20mean%20with%20Array.reduce%0A%20%20%20%20let%20mean%20%3D%20numbersArray.reduce((acc%2C%20curr)%20%3D%3E%20%7B%0A%20%20%20%20%20%20%20%20return%20acc%20%2B%20curr%0A%20%20%20%20%7D%2C%200)%20%2F%20numbersArray.length%0A%0A%20%20%20%20%2F%2F%20Assigning%20(value%20-%20mean)%20%5E%202%20to%20every%20numbersArrayay%20item%0A%20%20%20%20numbersArray%20%3D%20numbersArray.map((k)%20%3D%3E%20%7B%0A%20%20%20%20%20%20%20%20return%20(k%20-%20mean)%20**%202%0A%20%20%20%20%7D)%0A%0A%20%20%20%20%2F%2F%20Calculating%20the%20sum%20of%20updated%20numbersArrayay%0A%20%20%20%20let%20sum%20%3D%20numbersArray.reduce((acc%2C%20curr)%20%3D%3E%20acc%20%2B%20curr%2C%200)%0A%0A%20%20%20%20%2F%2F%20Calculating%20the%20variance%0A%20%20%20%20let%20variance%20%3D%20sum%20%2F%20numbersArray.length%0A%0A%20%20%20%20%2F%2F%20Returning%20the%20Standard%20deviation%0A%20%20%20%20%2F%2F%20return%20Math.sqrt(sum%20%2F%20numbersArray.length)%0A%20%20%20%20return%20Math.sqrt(variance)%0A%7D%0A%0Afunction%20salesMode(numbersArray)%20%7B%0A%20%20%20%20let%20uniques%20%3D%20Array.from(new%20Set(numbersArray)).map(r%20%3D%3E%20%5Br%2C%200%5D)%0A%20%20%20%20if%20(uniques.length%20%3D%3D%3D%20numbersArray.length)%20%7B%20return%20Math.min(...numbersArray)%20%7D%0A%20%20%20%20for%20(q%20in%20numbersArray)%20%7B%0A%20%20%20%20%20%20%20%20for%20(j%20in%20uniques)%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20if%20(numbersArray%5Bq%5D%20%3D%3D%3D%20uniques%5Bj%5D%5B0%5D)%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20uniques%5Bj%5D%5B1%5D%20%2B%3D%201%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%7D%0A%20%20%20%20uniques.sort((a%2C%20b)%20%3D%3E%20b%5B1%5D%20-%20a%5B1%5D)%0A%20%20%20%20return%20uniques%5B0%5D%5B0%5D%0A%7D%0A%0Afunction%20salesMedian(numbersArray)%20%7B%0A%20%20%20%20%2F%2F%20median%20of%20%5B3%2C%205%2C%204%2C%204%2C%201%2C%201%2C%202%2C%203%5D%20%3D%203%0A%20%20%20%20let%20median%20%3D%200%0A%20%20%20%20let%20numsLen%20%3D%20numbersArray.length%0A%20%20%20%20numbersArray.sort()%0A%0A%20%20%20%20if%20(%0A%20%20%20%20%20%20%20%20numsLen%20%25%202%20%3D%3D%3D%200%20%2F%2F%20is%20even%0A%20%20%20%20)%20%7B%0A%20%20%20%20%20%20%20%20%2F%2F%20average%20of%20two%20middle%20numbersArray%0A%20%20%20%20%20%20%20%20median%20%3D%20(numbersArray%5BnumsLen%20%2F%202%20-%201%5D%20%2B%20numbersArray%5BnumsLen%20%2F%202%5D)%20%2F%202%0A%20%20%20%20%7D%20else%20%7B%20%2F%2F%20is%20odd%0A%20%20%20%20%20%20%20%20%2F%2F%20middle%20number%20only%0A%20%20%20%20%20%20%20%20median%20%3D%20numbersArray%5B(numsLen%20-%201)%20%2F%202%5D%0A%20%20%20%20%7D%0A%0A%20%20%20%20return%20median%0A%7D%0A%0Afunction%20salesRange()%20%7B%0A%20%20%20%20let%20rangeMaximum%20%3D%20Math.max.apply(Math%2C%20sp)%0A%20%20%20%20let%20rangeMinimum%20%3D%20Math.min.apply(Math%2C%20sp)%0A%20%20%20%20return%20%5BrangeMaximum%2C%20rangeMinimum%5D%0A%7D%0A%0AsoldPriceArray()%0Alet%20rangeMaximum%20%3D%20salesRange()%5B0%5D.toFixed(2)%0Alet%20rangeMinimum%20%3D%20salesRange()%5B1%5D.toFixed(2)%0Alet%20mean%20%3D%20salesMean(sp).toFixed(2)%0Alet%20standardDeviation%20%3D%20salesDev(sp).toFixed(2)%0Alet%20median%20%3D%20salesMedian(sp).toFixed(2)%0Alet%20mode%20%3D%20salesMode(sp).toFixed(2)%0A%0Aconsole.log('Maximum%20Value%3A%20'%20%2B%20rangeMaximum%2C%20'Minimum%20Value%3A%20'%20%2B%20rangeMinimum%2C%20'Average%20Value%3A%20'%20%2B%20mean%2C%20'Standard%20Deviation%3A%20'%20%2B%20standardDeviation%2C%20'Median%20Value%3A%20'%20%2B%20median%2C%20'Most%20Common%20Value%3A%20'%20%2B%20mode)%0A%0Alet%20message%20%3D%20'Range%3A%20%24'%20%2B%20rangeMinimum%20%2B%20'-%24'%20%2B%20rangeMaximum%20%2B%20'%5Cn'%0Amessage%20%2B%3D%20'Median%3A%20%24'%20%2B%20median%20%2B%20'%5Cn'%0Amessage%20%2B%3D%20'Mode%3A%20%24'%20%2B%20mode%20%2B%20'%5Cn'%0Amessage%20%2B%3D%20'Mean%3A%20%24'%20%2B%20mean%20%2B%20'%5Cn'%0Amessage%20%2B%3D%20'Standard%20Deviation%3A%20%24'%20%2B%20standardDeviation%20%2B%20'%5Cn'%0Alet%20goodDeal%20%3D%200.5%0Amessage%20%2B%3D%20'Mean%20minus%20'%20%2B%20goodDeal%20*%20100%20%2B%20'%25%20standard%20deviation%20(good%20deal)%3A%20%24'%20%2B%20(mean%20-%20(standardDeviation%20*%20goodDeal)).toFixed(2)%20%2B%20'%5Cn'%0Amessage%20%2B%3D%20'Mean%20minus%20one%20standard%20deviation%20(great%20deal)%3A%20%24'%20%2B%20(mean%20-%20standardDeviation).toFixed(2)%0A%0Aalert(message)%7D)()%3B |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment