Как сделать такую логику в js?
Как мне поправить код?
Такой код не правят, а переписывают.
Сделаем табличку со скидками:const discounts = [
  { percent: 0, sum: 0 },
  { percent: 2, sum: 4000 },
  { percent: 3, sum: 10000 },
  { percent: 4, sum: 20000 },
  { percent: 5, sum: 50000 },
];
Получим скидку:const discount = discounts.reduce((p, c) => c.sum <= pricechange ? c : p);
Посчитаем цену со скидкой:const discountedPrice = pricechange * (100 - discount.percent) / 100;
UPD. В комментариях было высказано мнение, будто показывать reduce автору вопроса, который вроде как начинающий - типа нехорошо. Слишком сложно? Давайте сделаем проще.
Вместо суммы, на которой начинается действие скидки, будем работать с суммой, на которой скидка действовать перестаёт:const discounts = [
  { percent: 0, sum: 4000 },
  { percent: 2, sum: 10000 },
  { percent: 3, sum: 20000 },
  { percent: 4, sum: 50000 },
  { percent: 5, sum: Infinity },
];
В этом случае нужная скидка - первая, чья граница превышает проверяемую сумму:const discount = discounts.find(n => n.sum > pricechange);
Так и пишетеvar a = 4000;
var b = 10000;
var c = 20000;
var d = 50000;
var pricechange = {$p.price};
if (a <= pricechange && pricechange  < b) { // используем строгое равенство для от
 pricechange *= 0.98;
} 
 else if (b <= pricechange && pricechange  < c) {
 pricechange *= 0.97;
}
 else if (c <= pricechange && pricechange  < d) {
 pricechange *= 0.96;
}
 else  {
 pricechange *= 0.95;
}
Используйте строгое равенство, иначе если будет 4000, 10000, 20000, 50000, то оно не попадет в условия. 
У вас вот это неправильноelse {(d < pricechange){
 document.write ('pricechange*0.95');
}
либо пишите else if, либо просто else, т.к. из предыдущего условия понятно, что pricechange больше или равно d.