美文网首页
将对象需要的键名与键值摘出来

将对象需要的键名与键值摘出来

作者: 前端青音 | 来源:发表于2020-03-03 16:10 被阅读0次

需求:一个对象中可能有很多键值对,我们只需要某几个,比如,下面的对象obj只需要得到它的id,name,num

let obj= {'id':1,'name':'张三','age':23,'num':1,'real_name':'张三ss','percen':23}

let newObj = pickItems(obj, [
    'id',
    'name',
    'num'
  ])
console.log(newObj) // {'id':1,'name':'张三','num':1}

下方为具体方法

// "01:52:39.755000000"
export function timestr2float(codestr) {
  if (isValidString(codestr)) {
    let sum = 0.0
    let arr = codestr.split(':') || []
    if (arr.length > 0) {
      arr.forEach(i => {
        sum *= 60
        sum += parseFloat(i)
      })
    }
    return sum
  } else {
    return -1
  }
}
/**
 * 摘取对象中需要的键值对
 *
 * @param {plainObject} obj  需要摘取的对象
 * @param {keyArray} keyList  所需的键值对的键名组成的数组
 */
export function pickItems(obj, keyList) {
  let ret = {}
 if (isValidPlainObject(obj) && isValidKeyArray(keyList)) { 
    keyList.forEach(i => {
      let tmp = obj[i] || undefined
      if (tmp !== undefined) {
        ret[i] = tmp
      }
    })
  }
  return ret
}
export function subtract(list, sublist) {
  let idx
  if (isValidArray(list)) {
    if (isValidArray(sublist)) {
      sublist.forEach(item => {
        idx = list.indexOf(item)
        if (idx > -1) {
          list.splice(idx, 1)
        }
      })
    } else if (isValidPlainObject(sublist)) {
      idx = list.findIndex(sublist)
      if (idx > -1) {
        list.splice(idx, 1)
      }
    }
  }
  return list
}

/**
 * Type Conversion
 */
export function toNumber(id) {
  let num = parseInt(id)
  if (isNaN(num)) {
    return id
  } else {
    return num
  }
}

/**
 * Type Checking
 *
 * @param {plainObject} obj
 * @param {keyArray} keyList
 */
export function isValidPlainObject(arg) {
  // {}, new Object(): {__proto__: Object, prototype: undefined}
  if (isValidType(arg, 'Object')) {
    let isConstructorValid = arg.constructor === Object
    let isDunderProtoValid =
      isValidObject(arg.__proto__) && arg.__proto__ === Object.prototype
    // let isPrototypeValid = arg.prototype === undefined;
    // if (isConstructorValid && isDunderProtoValid && isPrototypeValid) {
    if (isConstructorValid && isDunderProtoValid) {
      return true
    }
  }
  return false
}

export function isValidKeyArray(arg) {
  // String, number, Symbol
  if (isValidArray(arg)) {
    let deduped = [...new Set(arg)]
    if (deduped.length === arg.length) {
      let ret = deduped.find(i => {
        return !(isValidString(i) || isValidNumber(i) || isValidSymbol(i))
      })
      if (ret === undefined) {
        return true
      }
    }
  }
  return false
}

export function isValidArray(arg) {
  return isValidType(arg, 'Array')
}
export function isValidId(arg) {
  return (isValidNumber(arg) && arg > 0) || isValidStringArg(arg)
}

export function isValidNumber(arg) {
  return isValidType(arg, 'Number')
}

export function isValidSymbol(arg) {
  return isValidType(arg, 'Symbol')
}

export function isValidObject(arg) {
  return isValidType(arg, 'Object')
}
export function isValidStringArg(arg) {
  return isValidString(arg) && arg.length > 0
}
export function isValidString(arg) {
  return isValidType(arg, 'String')
}

export function isValidFunction(arg) {
  return isValidType(arg, 'Function')
}

export function isValidType(arg, typeStr) {
  // Number, String, Boolean, Function, Object, Array, Date, RegExp, Map, Set, NaN, Undefined, Symbol
  return getType(arg) === typeStr
}

export function getType(arg) {
  let raw = Object.prototype.toString.apply(arg)
  let argType = raw.substring(8, raw.length - 1)
  if (argType === 'Number' && isNaN(arg)) {
    return 'NaN'
  }
  return argType
}

相关文章

  • 将对象需要的键名与键值摘出来

    需求:一个对象中可能有很多键值对,我们只需要某几个,比如,下面的对象obj只需要得到它的id,name,num 下...

  • Object

    概述: 对象是一组“键值对”的集合。 键名 <—— str:‘hello’ ——> 键值 键名 ...

  • 对象

    对象 一、概述 1.什么是对象 对象是一组键值对的组合。 a,b,fn为键名,冒号后面的值为键值,键名和键值组合在...

  • 循环遍历数组 对象的方法

    entries() 遍历键值对 keys() 遍历键名 values() 遍历键值 对象------遍历对象(属性...

  • es6常用特性(三)

    一、Iterator for...of与for...in的区别for...in只能获取对象的键名,不能直接获取键值...

  • WeakMap和WeakSet

    WeakMap 只接受对象最为键名(null 除外),不接受其他类型的值作为键名; 键名是弱引用,键值可以是任意的...

  • js对象

    js对象 所谓对象,是一种无序的数据集合,由若干‘键值对’构成。 对象详细介绍 键名 对象的键名都是字符串,引号可...

  • 2018-08-27javascript(5)基本数据那类型之对

    1.定义 .对象就是一组“键值对”(key-value)的集合,是一种无序的复合数据集合。 .键名 对象的所有键名...

  • Set、Map、WeakSet、WeakMap

    Set成员唯一、无序且不重复[value, value],键值与键名是一致的(或者说只有键值,没有键名)可以遍历,...

  • PHP数组去重

    PHP数组去重 array_unique: 此函数为数组翻转,也就是将原数组的键值翻转为键名,将原数组的键名翻转为...

网友评论

      本文标题:将对象需要的键名与键值摘出来

      本文链接:https://www.haomeiwen.com/subject/pwshlhtx.html