JavaScriptツール類(八):object対象

35028 ワード

Object
objectオブジェクト方法パッケージ
u.object = {}
オブジェクトの属性セットを取得します.
/**
 * @description          
 * @param {Object} obj    
 * @return {Array}       
 */
u.object.keys = function(obj) {
    if (u.isEmpty(obj)) return []

    var ret = []
    try {
        ret = Object.keys(obj)
    }
    catch (e) {
        for (var key in obj) {
            ret.push(key)
        }
    }
    return ret
}
オブジェクト属性の値のセットを取得します.
/**
 *@description             
 * @param {Object} obj    
 * @return {Array}       
 */
u.object.values = function(obj) {
    if (u.isEmpty(obj)) return []

    var ret = []
    try {
        ret = Object.values(obj)
    }
    catch (e) {
        for (var key in obj) {
            ret.push(obj[key])
        }
    }
    return ret
}
オブジェクトを結合
/**
 * @description     ( Object.assign()        ,      。       u.extend() )
 * @param {Object} target     
 * @param arguments             
 */
u.object.assign = function(target) {
    if (!u.isObject(target)) return

    try {
        Object.assign.apply(window, arguments)
    }
    catch (e) {
        for (var i = 1; i < arguments.length; i++) {
            var nextObj = arguments[i]
            if (u.isObject(nextObj)) {
                for (var nextKey in nextObj) {
                    target[nextKey] = nextObj[nextKey]
                }
            }
        }
    }
}
オブジェクトの1つ(複数)の属性を選択します.
/**
 * @description         (  )  
 * @param {Object} obj    
 * @param {String Array} keys      
 * @return {Object}    
 */
u.object.select = function(obj, keys) {
    if (u.isEmpty(obj) || u.isEmpty(keys)) return {}

    var ret = {}
    if (!u.isArray(keys)) keys = [keys]
    u.forEach(keys, function(i, key) {
        ret[key] = obj[key]
    })
    return ret
}
属性名を変更
/**
 * @description      
 * @param {Object} obj       
 * @param {String} oldKey       
 * @param {String} newKey      
 * @param {Boolean} keepOld         ,   false
 */
u.object.rename = function(obj, oldKey, newKey, keepOld) {
    if (u.isEmpty(obj)) return

    if (obj[oldKey]) {
        obj[newKey] = obj[oldKey]
        if (!keepOld) u.object.remove(obj, oldKey)
    }
}
オブジェクトの属性値を取得します.
/**
 * @description         (      )
 * @param {Object} obj   
 * @param {String} propertyName     'data.child.name'
 * @param {Boolean} ignoreCase         ,  false
 */
u.object.getValue = function(obj, propertyName, ignoreCase) {
    var propertyValue = null
    if (!obj) return propertyValue
    if (u.isEmpty(propertyName)) return propertyValue

    var pointIndex = propertyName.indexOf('.')
    if (pointIndex > -1) {
        obj = obj[propertyName.substring(0, pointIndex)]
        return u.object.getValue(obj, propertyName.substring(pointIndex + 1), ignoreCase)
    }
    else {
        u.forEach(obj, function(key, value) {
            if (u.equal(key, propertyName, ignoreCase)) {
                propertyValue = value
                return false
            }
        })
    }
    return propertyValue
}
オブジェクトの整列
/**
 * @description      
 * @param {Object} paramObj    
 * @return {String}
 */
u.object.serialize = function(paramObj) {
    var name, value, fullSubName, subName, subValue, innerObj
    var ret = ''
    for (name in paramObj) {
        value = paramObj[name]
        if (value instanceof Array) {
            for (var i = 0; i < value.length; ++i) {
                subValue = value[i]
                fullSubName = name + '[' + i + ']'
                innerObj = {}
                innerObj[fullSubName] = subValue
                ret += u.object.serialize(innerObj) + '&'
            }
        }
        else if (value instanceof Object) {
            for (subName in value) {
                subValue = value[subName]
                fullSubName = name + '[' + subName + ']'
                innerObj = {}
                innerObj[fullSubName] = subValue
                ret += u.object.serialize(innerObj) + '&'
            }
        }
        else if (value !== undefined && value !== null) { ret += encodeURIComponent(name) + '=' + encodeURIComponent(value) + '&' }
    }
    ret = ret.substring(0, ret.length - 1)
    return ret
}
オブジェクトに指定された属性または値が空の属性(undefined,null,')を削除します.
/**
 * @description                    (undefined, null, '')
 * @param {Object} obj    
 * @param {String Array} keys      ,          
 * @return {Object}
 */
u.object.remove = function(obj, keys) {
    if (u.isEmpty(obj)) return obj

    var ret = {}
    var es6 = true
    if (!u.isEmpty(keys)) {
        if (!u.isArray(keys)) keys = [keys]
        u.forEach(keys, function(i, key) {
            try {
                delete obj[key]
            }
            catch (e) {
                es6 = false
                return false
            }
        })
        if (es6) return obj
        else {
            u.forEach(obj, function(key, value) {
                if (keys.indexOf(key) === -1) {
                    ret[key] = value
                }
            })
            return ret
        }
    }
    else {
        u.forEach(obj, function(key, value) {
            var wrongful = (value === null || value === undefined || value === '')
            try {
                if (wrongful) delete obj[key]
            }
            catch (e) {
                es6 = false
                if (!wrongful) {
                    ret[key] = value
                }
            }
        })
        if (es6) return obj
        else return ret
    }
}
オブジェクトを空にする
/**
 * @description     
 * @param {Object} obj    
 * @param {Array} keys      ,         
 * @return {Object}       
 */
u.object.clear = function(obj, keys) {
    if (u.isEmpty(obj)) return {}

    if (keys) {
        if (!u.isArray(keys)) keys = [keys]
        u.forEach(keys, function(i, key) {
            obj[key] = ''
        })
    }
    else {
        for (var key in obj) {
            obj[key] = ''
        }
    }
    return obj
}
ダウンロード
npm i sg-utils -S
GitHub住所(星にあげてください.)
https://github.com/shiguang0116/sg-utils
シリーズ記事
JavaScriptツール類(一):util.js作成及びアップロードJavaScriptツール類(二):cookieキャッシュJavaScriptツール類(三):locastrageローカルストレージJavaScriptツール類(四):データタイプJavaScriptツール類(五):string文字列JavaScriptツール類(六):array配列JavaScriptツール類(8):object対象JavaScriptツール類(9):date日付JavaScriptツール類(10):base 64符号化、JavaScriptツール類(11):ブラウザ、モバイル端末タイプJavaScriptツール類(12):validateフォーム認証JavaScriptツール類(13):JsonデータフォーマットJavaScriptツール類:util.js用法例