Skip to content

Instantly share code, notes, and snippets.

@wulucxy
Last active July 9, 2018 01:17
Show Gist options
  • Save wulucxy/600138cdfcb65d3f56886e58b1e3c5f0 to your computer and use it in GitHub Desktop.
Save wulucxy/600138cdfcb65d3f56886e58b1e3c5f0 to your computer and use it in GitHub Desktop.
Array #snippet

Array

removeArrayItem

删除数组中指定索引的字段

const removeArrayItem = (arr, i) => {
  return ([
    ...arr.slice(0, i),
    ...arr.slice(i + 1)
  ])
}

Demo:

var testArr = [1,2,3,4,5]
removeArrayItem(testArr, 2) // [1,2,4,5]

addArrayItem

数组新增 Item

const addArrayItem = (arr, newData) => {
  return arr.concat(newData)
}

demo:

addArrayItem([1,2,3,4,5], 6) // [1,2,3,4,5,6]

changeArrayItem

修改现有的数组

const changeArrayItem = (arr, i, newData) => {
  return ([
    ...arr.slice(0, i),
    newData,
    ...arr.slice(i + 1)
  ])
}

demo:

changeArrayItem([1,2,3,4,5], 2, 6) // [1, 2, 6, 4, 5]

isUniq

数组里面的元素是否唯一

const isUniq = (arr) => {
  return arr.every(i => arr.indexOf(i) === arr.lastIndexOf(i))
}

Demo:

isUniq([1,2,3,4,2]) // false
isUniq([1,2,3,4]) // true

objectToArray

将对象转化为array,同时过滤undefined

/**
 * {a:1, b: undefined} => [{a:1}]
 */
const objectToArray = obj => Object.keys(obj).filter(k => {
  return (typeof obj[k] !== 'undefined')
}).map(k => {
  return {[k]: obj[k]}
})

Demo:

objectToArray({a:1, b: undefined}) // [{a:1}]

everyNth

每隔 n 个值取值

const everyNth = (arr, nth) => arr.filter((e, i) => (i % nth === nth - 1))

Demo:

var demoArr = [1, 2, 3, 4, 5, 6, 7]
everyNth(demoArr, 2) // 2, 4, 6

getLabelByValue

传递一个包含多个对象的数组,其中对象按照 { label: '', value: '' } 处理,通过函数传入的 value 获取 label 值。

const getLabelByValue = (params, value) => {
  if (value == null) return ''
  if (!params || !Array.isArray(params)) return value  
  const item = params.find(item => String(item.value) === String(value))

  return (item && item.label) || value
}

Demo:

var params = [
  { label: 'test1', value: 1 }, 
  { label: 'test2', value: 2 }
]

getLabelByValue(params, 1)  // test1
getLabelByValue(params, 2) // test2
getLabelByValue(params, 'other') // other

getItemByValue

传递一个包含多个对象的数组,其中对象按照 { label: '', value: '' } 处理, 通过传入的 value 获取数组里面对应的对象。

const getItemByValue = (params, value) => {
  return params && params.find(item => String(item.value) === String(value))
}

Demo:

var params = [
  { label: 'test1', value: 1 }, 
  { label: 'test2', value: 2 }
]

getItemByValue(params, 1) // { label: 'test1', value: 1 }

getItemByValue(params, 3) // undefined
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment