思路:使用sort方法对数组按照指定顺序排序并得到一个排序后的数组arr,再使用forEach方法遍历数组arr,并将其元素中的name取出来放入li标签中,再将ul.innerHTML更新为str。

<script>
  var cups = [
    { type: 1, price: 100, color: 'black', sales: 3000, name: '牛客logo马克杯' },
    { type: 2, price: 40, color: 'blue', sales: 1000, name: '无盖星空杯' },
    { type: 4, price: 60, color: 'green', sales: 200, name: '老式茶杯' },
    { type: 3, price: 50, color: 'green', sales: 600, name: '欧式印花杯' }
  ]
  var ul = document.querySelector('ul');
  var upbtn = document.querySelector('.up');
  var downbtn = document.querySelector('.down');
  function render(arr)
  {
     var str=""
     //element表示数组元素
     arr.forEach(element=>{
       str+=`<li>${element.name}</li>`
     })
     ul.innerHTML=str
  }
  upbtn.onclick=function(){
  	 //升序
     var uparr=cups.sort(function(a,b){
        return a.sales-b.sales
     })
     render(uparr)
  }
  downbtn.onclick=function(){
  	 //降序
     var downarr=cups.sort(function(a,b){
        return b.sales-a.sales
     })
     render(downarr)
  }
</script>

总结:sort方法对数组排序,其参数是一个回调函数,回调函数接受两个参数a和b,如果希望a排在b前面则返回一个负数,如果希望a排在b后面则返回一个正数,如果a和b相等则返回0。即数组.sort()返回排序后的数组;数组.sort(function(a,b){return a-b})升序,因为如果a比b小则返回负数,即a在b前,如果a比b大则返回正数,即a在b后,这样就是升序排列;数组.sort(function(a,b){return b-a})降序,因为如果a比b小则返回正数,即a在b后,如果a比b大则返回负数,即a在b前,这样就是降序排列。arr.forEach(function(currentValue, index, array){})方法遍历数组,这三个参数是固定的,但是可以省略部分参数,currentValue表示当前正在处理的元素值,index表示当前正在处理的元素下标,array表示当前正在处理的数组。