巧用 splice 获取有序数组

46 阅读1分钟

via: one vite commit

let randomPlugin = [
  { 
    name: 'A',
    order: 'post'
  },
  { 
    name: 'B',
    order: 'normal'
  },
  { 
    name: 'C',
    order: 'pre'
  },
  { 
    name: 'D',
    order: 'normal'
  },
  { 
    name: 'E',
    order: 'pre'
  },
  { 
    name: 'F',
    order: 'normal'
  },
]


// Use indexes to track and insert the ordered plugins directly in the
// resulting array to avoid creating 3 extra temporary arrays per hook
let pre = 0
let normal = 0
let post = 0

let sortedPlugins = []
for(let plugin of randomPlugin) {
  if (plugin.order === 'pre') {
    sortedPlugins.splice(pre++, 0, plugin)
    continue
  }

  if (plugin.order === 'post') {
    sortedPlugins.splice(pre + normal + post++, 0, plugin)
    continue
  }

  sortedPlugins.splice(pre + normal++, 0, plugin)
}


console.log(sortedPlugins)
// [
//   { name: 'C', order: 'pre' },
//   { name: 'E', order: 'pre' },
//   { name: 'B', order: 'normal' },
//   { name: 'D', order: 'normal' },
//   { name: 'F', order: 'normal' },
//   { name: 'A', order: 'post' }
// ]