前端-处理数据的函数

判断数据是否为空,对象是否存在某属性,属性值是否为空,对大数据进行换算,对单位进行转换.

目录

 1.格式化数据

 2.判断值是否为空(包括对象、数组、字符串、数值类型)

(1)值是0不表示空

 (2)值是0表示空

3. 检查对象是否具有指定名称的非空属性

4.判断值是否为空(包括字符串、数值类型) 

 5.格式化数据-返回(值/1000)的值

 6.数值转换用万、亿、做后缀

(1)保留两位小数

(2)不保留小数部分

 7.涉及三位数值以及单位转换

8.根据传入type类型,数据直接转换。 

9.input输入框值的类型限制 


 1.格式化数据


/*** 格式化数据函数* 该函数用于将给定的数据根据特定规则进行格式化,以确保数据以一致的方式展示* @param {Object|number|string|array} data - 待格式化的数据,可以是对象、数字、字符串或对象数组* @param {string} fieldName - 可选参数,指定对象中的字段名,如果未提供或字段不存在,则直接使用data* @param {boolean} flag - 可选参数,指定对象中的字段名,表示是否保留两位小数* @returns {string} - 格式化后的数据字符串,如果数据为空则返回'--',如果数据是数字则保留两位小数*/
export  function formatData(data, fieldName = null,flag = true) {// 获取实际需要处理的数据let value;if (Array.isArray(data)) {// 如果 data 是一个数组,检查数组是否为空if (data.length === 0) {return '--';}// 假设我们需要处理数组的第一个元素const firstItem = data[0];if (firstItem && typeof firstItem === 'object') {value = fieldName ? (firstItem[fieldName] !== undefined ? firstItem[fieldName] : null) : firstItem;} else {value = firstItem;}} else {value = fieldName ? (data && data[fieldName] !== undefined ? data[fieldName] : null) : data;}// 判断数据是否为空if (value === null ||value === undefined ||value === '' || // 添加对空字符串的检查(typeof value === 'object' && Object.keys(value).length === 0) // 添加对空对象的检查) {return '--';}// 将数值字符串转换为数字if (typeof value === 'string' && !isNaN(value)) {value = parseFloat(value);}// 如果数据是数字,保留两位小数if (typeof value === 'number') {if(flag){return value.toFixed(2);}else{return value.toFixed(0);}}// 其他情况,直接返回数据return value;}

以下是对formatData函数的各种输入情况进行示例和结果展示:

  1. 数组为空

    • 输入formatData([])
    • 结果--
  2. 数组包含空对象

    • 输入formatData([{}])
    • 结果--
  3. 数组包含有效对象

    • 输入formatData([{name: 'John Doe', age: 30}])
    • 结果{name: 'John Doe', age: 30}
  4. 数组包含单个非对象值

    • 输入formatData([42])
    • 结果42.00
  5. 数组包含多个对象,处理第一个对象

    • 输入formatData([{name: 'John Doe'}, {name: 'Jane Doe'}])
    • 结果:{ name: 'John Doe' }
  6. 传入单个对象,指定字段名

    • 输入formatData({name: 'John Doe', age: 30}, 'name')
    • 结果John Doe
  7. 传入单个对象,未指定字段名

    • 输入formatData({name: 'John Doe', age: 30})
    • 结果{name: 'John Doe', age: 30}
  8. 传入单个对象,指定字段名但字段不存在

    • 输入formatData({name: 'John Doe', age: 30}, 'email')
    • 结果:--
  9. 传入单个空对象

    • 输入formatData({})
    • 结果--
  10. 传入单个字符串

    • 输入formatData('Hello World')
    • 结果Hello World
  11. 传入空字符串

    • 输入formatData('')
    • 结果--
  12. 传入数值字符串

    • 输入:formatData('123.456',null,false)
    • 结果  123
    • 输入:formatData('123.456')
    • 结果  123.46
  13. 传入空数组对象

    • 输入formatData([{}, {}])
    • 结果--

 2.判断值是否为空(包括对象、数组、字符串、数值类型)

(1)值是0不表示空

/**
* 判断给定值是否为空
*
* @param value 要判断的值
* @returns 如果值为空,返回 true;否则返回 false
*/export function isEmpty(value) {return (value == null || // null 或 undefined(typeof value === 'string' && value.trim() === '') || // 空字符串(包括空格的情况)(Array.isArray(value) && value.length === 0) || // 空数组(typeof value === 'object' && Object.keys(value).length === 0) // 空对象);}

以下是对isEmpty函数的各种输入情况进行示例和结果展示:

  1. 输入为null

    • 输入isEmpty(null)
    • 结果true
  2. 输入为undefined

    • 输入isEmpty(undefined)
    • 结果true
  3. 输入为空字符串

    • 输入isEmpty('')
    • 结果true
  4. 输入为仅包含空格的字符串

    • 输入isEmpty(' ')
    • 结果true
  5. 输入为非空字符串

    • 输入isEmpty('Hello World')
    • 结果false
  6. 输入为空数组

    • 输入isEmpty([])
    • 结果true
  7. 输入为非空数组

    • 输入isEmpty([1, 2, 3])
    • 结果false
  8. 输入为空对象

    • 输入isEmpty({})
    • 结果true
  9. 输入为非空对象

    • 输入isEmpty({name: 'John Doe', age: 30})
    • 结果false
  10. 输入为包含空对象的数组

    • 输入isEmpty([{}, {}])
    • 结果false
  11. 输入为包含空字符串的对象

    • 输入isEmpty({name: '', age: 30})
    • 结果false
  12. 输入为数值0

    • 输入isEmpty(0)
    • 结果true
  13. 输入为数值为0的字符串
    • 输入isEmpty('0')
    • 结果:false

 (2)值是0表示空

 /**
* 判断给定值是否为空
*
* @param value 要判断的值
* @returns 如果值为空或为0,返回 true;否则返回 false
*/export function isEmpty2(value) {return (value == null || // null 或 undefined(typeof value === 'number' && value === 0) || // 数值为0(typeof value === 'string' && (value.trim() === '' || (parseFloat(value) === 0 && !isNaN(parseFloat(value)))) || // 空字符串或数值为0的字符串(包括"0.000")(Array.isArray(value) && value.length === 0) || // 空数组(typeof value === 'object' && Object.keys(value).length === 0) // 空对象));
}

以下是对isEmpty2函数的各种输入情况进行示例和结果展示:

  1. 输入为null

    • 输入isEmpty2(null)
    • 结果true
  2. 输入为undefined

    • 输入isEmpty2(undefined)
    • 结果true
  3. 输入为数值0

    • 输入isEmpty2(0)
    • 结果true
  4. 输入为空字符串

    • 输入isEmpty2('')
    • 结果true
  5. 输入为仅包含空格的字符串

    • 输入isEmpty2(' ')
    • 结果true
  6. 输入为数值为0的字符串

    • 输入isEmpty2('0')
    • 结果true
  7. 输入为非空字符串

    • 输入isEmpty2('Hello World')
    • 结果false
  8. 输入为空数组

    • 输入isEmpty2([])
    • 结果true
  9. 输入为非空数组

    • 输入isEmpty2([1, 2, 3])
    • 结果false
  10. 输入为空对象

    • 输入isEmpty2({})
    • 结果true
  11. 输入为非空对象

    • 输入isEmpty2({name: 'John Doe', age: 30})
    • 结果false
  12. 输入为包含空对象的数组

    • 输入isEmpty2([{}, {}])
    • 结果false
  13. 输入为包含0的数组

    • 输入isEmpty2([0])
    • 结果:false
  14. 输入为包含数值为0的字符串的对象

    • 输入isEmpty2({value: '0'})
    • 结果:false

3. 检查对象是否具有指定名称的非空属性

/*** 检查对象是否具有指定名称的非空属性** @param obj 对象,用于检查属性* @param propName 属性名称* @returns 如果对象具有指定名称的非空属性,则返回true;否则返回false*/export function hasNonEmptyProperty(obj, propName) {// 检查对象是否具有该属性if (obj.hasOwnProperty(propName)) {// 获取属性值const propValue = obj[propName];// 检查属性值是否不为空// 这里我们考虑了几种“空”的情况:null, undefined, 空字符串// 如果你还想考虑其他情况(如0,false等),请根据需要修改条件if (propValue !== null && propValue !== undefined && propValue !== '') {return true;}}// 如果对象没有该属性,或者属性值为空,返回falsereturn false;}
  1. 对象具有指定名称的非空属性

    • 输入hasNonEmptyProperty({name: 'John Doe'}, 'name')
    • 结果true
  2. 对象具有指定名称但属性值为空字符串

    • 输入hasNonEmptyProperty({name: ''}, 'name')
    • 结果false
  3. 对象具有指定名称但属性值为null

    • 输入hasNonEmptyProperty({name: null}, 'name')
    • 结果false
  4. 对象具有指定名称但属性值为undefined

    • 输入hasNonEmptyProperty({name: undefined}, 'name')
    • 结果false
  5. 对象没有指定名称的属性

    • 输入hasNonEmptyProperty({age: 30}, 'name')
    • 结果false
  6. 对象具有指定名称且属性值为非空字符串,但属性名称不匹配

    • 输入hasNonEmptyProperty({name: 'John Doe'}, 'username')
    • 结果false
  7. 对象具有指定名称且属性值为0(根据函数当前逻辑,0被视为非空)

    • 输入hasNonEmptyProperty({count: 0}, 'count')
    • 结果true
  8. 对象具有指定名称且属性值为false(根据函数当前逻辑,false被视为非空)

    • 输入hasNonEmptyProperty({isActive: false}, 'isActive')
    • 结果true

4.判断值是否为空(包括字符串、数值类型) 

//导出公共函数 判断是否为空
export  function isNullorEmpty (str) {return (str === '' || str == '--'|| str === null || str === undefined || isNaN(str));
}

以下是对isNullorEmpty函数的各种输入情况进行示例和结果展示:

  1. 输入为空字符串

    • 输入isNullorEmpty('')
    • 结果true
  2. 输入为字符串'--'

    • 输入isNullorEmpty('--')
    • 结果true
  3. 输入为null

    • 输入isNullorEmpty(null)
    • 结果true
  4. 输入为undefined

    • 输入isNullorEmpty(undefined)
    • 结果true
  5. 输入为数字0

    • 输入isNullorEmpty(0)
    • 结果:false
  6. 输入为布尔值false

    • 输入isNullorEmpty(false)
    • 结果:false
  7. 输入为字符串'0'

    • 输入isNullorEmpty('0')
    • 结果false
  8. 输入为有效数字字符串

    • 输入isNullorEmpty('123')
    • 结果false
  9. 输入为NaN

    • 输入isNullorEmpty(NaN)
    • 结果true(因为isNaN(NaN)返回true
  10. 输入为有效数字

    • 输入isNullorEmpty(123)
    • 结果false(因为123是一个有效的数字,且isNaN(123)返回false

 5.格式化数据-返回(值/1000)的值

//公共函数 判断是否为空
function isNullorEmpty (str) {return (str === '' || str == '--'|| str === null || str === undefined || isNaN(str));
}
//公共函数 普通数据数值转换  保留两位小数 /1000
export  function TransNumber (value) {if (isNullorEmpty(value)) return '--';const t = String(value).charAt(0);let floatNum = value;if (t === '-') {floatNum = Math.abs(floatNum)}if (t === '-') {return '-' + Number(floatNum/1000).toFixed(2)} else {return Number(floatNum/1000).toFixed(2)}}

 对TransNumber函数的各种可能性进行示例和结果展示

  1. 输入为空字符串

    • 输入TransNumber('')
    • 结果'--'
  2. 输入为特定标记字符串'--'

    • 输入TransNumber('--')
    • 结果'--'
  3. 输入为null

    • 输入TransNumber(null)
    • 结果'--'
  4. 输入为undefined

    • 输入TransNumber(undefined)
    • 结果'--'
  5. 输入为NaN

    • 输入TransNumber(NaN)
    • 结果'--'
  6. 输入为正整数字符串'1000'

    • 输入TransNumber('1000')
    • 结果'1.00'
  7. 输入为负整数字符串'-1000'

    • 输入TransNumber('-1000')
    • 结果'-1.00'
  8. 输入为浮点数字符串'1234.56'

    • 输入TransNumber('1234.56')
    • 结果'1.23'
  9. 输入为包含非数字字符的字符串'abc123'

    • 输入TransNumber('abc123')
    • 结果'--'
  10. 输入为数字0

    • 输入TransNumber(0)
    • 结果'0.00'
  11. 输入为负数-1234

    • 输入TransNumber(-1234)
    • 结果'-1.23'

 6.数值转换用万、亿、做后缀

(1)保留两位小数

//公共函数 判断是否为空
function isNullorEmpty (str) {return (str === '' || str == '--'|| str === null || str === undefined || isNaN(str));
}
//公共函数 普通数据数值转换  保留两位小数 /10000
export default function formatNumber (value) {if (isNullorEmpty(value)) return '--';const t = String(value).charAt(0);let floatNum = value;if (t === '-') {floatNum = Math.abs(floatNum)}if (floatNum < 10000) {if (t === '-') {return '-' + Number(floatNum).toFixed(2)} else {return Number(floatNum).toFixed(2)}} else if (floatNum < 100000000) {if (t === '-') {return '-' + (Number(floatNum) / 10000).toFixed(2) + '万'} else {return (Number(floatNum) / 10000).toFixed(2) + '万'}} else {if (t === '-') {return '-' + (Number(floatNum) / 100000000).toFixed(2) + '亿'} else {return (Number(floatNum) / 100000000).toFixed(2) + '亿'}}
}

formatNumber函数的各种可能性进行示例和结果展示

  1. 输入为空字符串

    • 输入formatNumber('')
    • 结果'--'
  2. 输入为特定标记字符串'--'

    • 假设isNullorEmpty('--')返回true(注意:这个函数的实际实现并未给出,因此这里基于假设)
    • 输入formatNumber('--')
    • 结果'--'
  3. 输入为null

    • 输入formatNumber(null)
    • 结果'--'
  4. 输入为undefined

    • 输入formatNumber(undefined)
    • 结果'--'
  5. 输入为正整数1234

    • 输入formatNumber(1234)
    • 结果'1234.00'
  6. 输入为负整数-12345

    • 输入formatNumber(-12345)
    • 结果'-1.23万'
  7. 输入为浮点数1234567.89

    • 输入formatNumber(1234567.89)
    • 结果'123.46万'
  8. 输入为极大整数987654321

    • 输入formatNumber(987654321)
    • 结果'9.88亿'
  9. 输入为极小负数-9876543210

    • 输入formatNumber(-9876543210)
    • 结果'-98.77亿'

(2)不保留小数部分

//公共函数 判断是否为空
function isNullorEmpty (str) {return (str === '' || str == '--'|| str === null || str === undefined || isNaN(str));
}//公共函数 普通数据数值转换不保留小数 /10000
export function formatNumber2 (value) {if (isNullorEmpty(value)) return '--';const t = String(value).charAt(0);let floatNum = value;if (t === '-') {floatNum = Math.abs(floatNum)}if (floatNum < 10000) {if (t === '-') {return '-' + Number(floatNum).toFixed(0)} else {return Number(floatNum).toFixed(0)}} else if (floatNum < 100000000) {if (t === '-') {return '-' + (Number(floatNum) / 10000).toFixed(0)+ '万'} else {return (Number(floatNum) / 10000).toFixed(0)+ '万'}} else {if (t === '-') {return '-' + (Number(floatNum) / 100000000).toFixed(0) + '亿'} else {return (Number(floatNum) / 100000000).toFixed(0) + '亿'}}
}

formatNumber2函数,并列出所有可能性的示例和结果。

  1. 输入为空字符串

    • 输入formatNumber2('')
    • 结果'--'
  2. 输入为特定标记字符串'--'

    • 输入formatNumber2('--')
    • 结果'--'
  3. 输入为null

    • 输入formatNumber2(null)
    • 结果'--'
  4. 输入为undefined

    • 输入formatNumber2(undefined)
    • 结果'--'
  5. 输入为正整数小于10000

    • 输入formatNumber2(5000)
    • 结果5000
  6. 输入为负整数小于10000

    • 输入formatNumber2(-5000)
    • 结果-5000
  7. 输入为正整数大于等于10000且小于100000000

    • 输入formatNumber2(50000000)
    • 结果5000万
  8. 输入为负整数大于等于10000且小于100000000

    • 输入formatNumber2(-50000000)
    • 结果-5000万
  9. 输入为正整数大于等于100000000

    • 输入formatNumber2(1234567890)
    • 结果12亿
  10. 输入为负整数大于等于100000000

    • 输入formatNumber2(-1234567890)
    • 结果-12亿 

 7.涉及三位数值以及单位转换

例如1t=1000kg   1MWh=1000kWh  

//公共函数 判断是否为空
function isNullorEmpty (str) {return (str === '' || str == '--'|| str === null || str === undefined || isNaN(str));
}//公共函数 涉及电的数值转换  /1000
export  function formatElectNumber (value) {if (isNullorEmpty(value)) return '--';const t = String(value).charAt(0);let floatNum = value;if (t === '-') {floatNum = Math.abs(floatNum)}if (floatNum < 1000) {if (t === '-') {return '-' + Number(floatNum).toFixed(2)} else {return Number(floatNum).toFixed(2)}} else if (floatNum < 1000000) {if (t === '-') {return '-' + (Number(floatNum) / 1000).toFixed(2) } else {return (Number(floatNum) / 1000).toFixed(2) }} else {if (t === '-') {return '-' + (Number(floatNum) / 1000000).toFixed(2) } else {return (Number(floatNum) / 1000000).toFixed(2) }}
}
//公共函数 涉及电的单位转换 /1000
export  function formatElectUnit (value) {if (isNullorEmpty(value)) return 'kW';const t = String(value).charAt(0);let floatNum = value;if (t === '-') {floatNum = Math.abs(floatNum)}if (floatNum < 1000) {return 'kW'} else if (floatNum < 1000000) {return 'MW'} else {return 'GW'}
}
//公共函数  涉及电的单位转换 /1000
export  function formatElect2Unit (value) {if (isNullorEmpty(value)) return 'kWh';const t = String(value).charAt(0);let floatNum = value;if (t === '-') {floatNum = Math.abs(floatNum)}if (floatNum < 1000) {return 'kWh'} else if (floatNum < 1000000) {return 'MWh'} else {return 'GWh'}
}
//公共函数  涉及装机容量的单位转换 /1000
export  function formatElect3Unit (value) {if (isNullorEmpty(value)) return 'kWp';const t = String(value).charAt(0);let floatNum = value;if (t === '-') {floatNum = Math.abs(floatNum)}if (floatNum < 1000) {return 'kWp'} else if (floatNum < 1000000) {return 'MWp'} else {return 'GWp'}
}

formatElectNumber 函数

示例 1: 空值

  • 输入formatElectNumber('')

  • 结果'--'

示例 2: 特定值

  • 输入formatElectNumber(2777664.7235)

  • 结果:2.78

示例 3: 小于1000的正数

  • 输入formatElectNumber(500)

  • 结果500.00

示例 4: 小于1000的负数

  • 输入formatElectNumber(-500)

  • 结果-500.00

示例 5: 大于等于1000且小于1000000的正数

  • 输入formatElectNumber(123456)

  • 结果:123.46

示例 6: 大于等于1000000的数

  • 输入formatElectNumber(1234567890)

  • 结果1234.57

formatElectUnit 函数

示例 1: 空值

  • 输入formatElectUnit('')

  • 结果'kW'

示例 2: 小于1000的数

  • 输入formatElectUnit(500)

  • 结果'kW'

示例 3: 大于等于1000且小于1000000的数

  • 输入formatElectUnit(123456)

  • 结果'MW'

示例 4: 大于等于1000000的数

  • 输入formatElectUnit(1234567890)

  • 结果'GW'

formatElect2Unit 函数

示例 1: 空值

  • 输入formatElect2Unit('')

  • 结果'kWh'

示例 2: 小于1000的数

  • 输入formatElect2Unit(500)

  • 结果'kWh'

示例 3: 大于等于1000且小于1000000的数

  • 输入formatElect2Unit(123456)

  • 结果'MWh'

示例 4: 大于等于1000000的数

  • 输入formatElect2Unit(1234567890)

  • 结果'GWh'

formatElect3Unit 函数

示例 1: 空值

  • 输入formatElect3Unit('')

  • 结果'kWp'

示例 2: 小于1000的数

  • 输入formatElect3Unit(500)

  • 结果'kWp'

示例 3: 大于等于1000且小于1000000的数

  • 输入formatElect3Unit(123456)

  • 结果'MWp'

示例 4: 大于等于1000000的数

  • 输入formatElect3Unit(1234567890)

  • 结果'GWp'

8.根据传入type类型,数据直接转换。 

//公共函数 判断是否为空
function isNullorEmpty (str) {return (str === '' || str == '--'|| str === null || str === undefined || isNaN(str));
}
//公共函数 涉及电的数值转换  根据类型直接转换  /1000
export  function formatMyElectNumber (value,type) {if (isNullorEmpty(value)) return '--';const t = String(value).charAt(0);let floatNum = value;if (t === '-') {floatNum = Math.abs(floatNum)}if(type){if(type=='1'){if (t === '-') {return '-' + Number(floatNum).toFixed(2)} else {return Number(floatNum).toFixed(2)}}else if(type=='2'){if (t === '-') {return '-' + (Number(floatNum) / 1000).toFixed(2) } else {return (Number(floatNum) / 1000).toFixed(2) }}else if(type=='3'){if (t === '-') {return '-' + (Number(floatNum) / 1000000).toFixed(2) } else {return (Number(floatNum) / 1000000).toFixed(2) }}}else{if (floatNum < 1000) {if (t === '-') {return '-' + Number(floatNum).toFixed(2)} else {return Number(floatNum).toFixed(2)}} else if (floatNum < 1000000) {if (t === '-') {return '-' + (Number(floatNum) / 1000).toFixed(2) } else {return (Number(floatNum) / 1000).toFixed(2) }} else {if (t === '-') {return '-' + (Number(floatNum) / 1000000).toFixed(2) } else {return (Number(floatNum) / 1000000).toFixed(2) }}}}

formatMyElectNumber

  1. type 为 '1'

    • formatMyElectNumber(1234, '1') 返回 '1234.00'
    • formatMyElectNumber(-5678, '1') 返回 '-5678.00'
    • formatMyElectNumber('123.45', '1') 返回 '123.45'
    • formatMyElectNumber(null, '1') 返回 '--'
  2. type 为 '2'

    • formatMyElectNumber(1234, '2') 返回 '1.23'
    • formatMyElectNumber(-5678, '2') 返回 '-5.68'
    • formatMyElectNumber('678.90', '2') 返回 '0.68'
  3. type 为 '3'

    • formatMyElectNumber(1234567, '3') 返回 '1.23'
    • formatMyElectNumber(-8901234, '3') 返回 '-8.90'
    • formatMyElectNumber('987654.32', '3') 返回 '0.99'
  4. type 为 'undefined'

   1. formatMyElectNumber(1234) 返回 '1.23'

   2. formatMyElectNumber(-5678) 返回 '-5.68'

   3. formatMyElectNumber('123.45') 返回 '123.45'

   4.formatMyElectNumber(null) 返回 '--'

9.input输入框值的类型限制 


/*只输入数字 包括小数点和负数*/
function inputFilter (value) {let data = value.target.value;const t = value.target.value.charAt(0);//判断输入是否以负号开始。data = data.replace(/[^\d.]/g, '');//移除了所有非数字和非小数点的字符。data = data.replace(/^\./g, ''); //验证第一个字符是数字而不是字符data = data.replace(/\.{2,}/g, '.'); //只保留第一个.清除多余的data = data.replace('.', '$#$').replace(/\./g, '').replace('$#$', '.'); //保证.只出现一次if (t === '-'){data = '-' + data;}return data;
}
<a-inputv-model="inputValue"@input="event => inputValue = inputFilter(event)"placeholder="请输入数字(包括小数点和负数)"/>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/63513.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基础入门-Web应用蜜罐系统堡垒机运维API内外接口第三方拓展架构部署影响

知识点&#xff1a; 1、基础入门-Web应用-蜜罐系统 2、基础入门-Web应用-堡垒机运维 3、基础入门-Web应用-内外API接口 4、基础入门-Web应用-第三方拓展架构 一、演示案例-Web-拓展应用-蜜罐-钓鱼诱使 蜜罐&#xff1a;https://hfish.net/ 测试系统&#xff1a;Ubuntu 20.04 …

Android运行低版本项目可能遇到的问题

Android运行低版本项目可能遇到的问题 低版本项目总是遇到各种问题的&#xff0c;耐心点 一、gradle-xxx.xxx.xxx.zip一直下载不下来 在gradle-wrapper.properties可以试下 distributionBaseGRADLE_USER_HOME distributionPathwrapper/dists zipStoreBaseGRADLE_USER_HOME …

springboot中Controller内文件上传到本地以及阿里云

上传文件的基本操作 <form action"/upload" method"post" enctype"multipart/form-data"> <h1>登录</h1> 姓名&#xff1a;<input type"text" name"username" required><br> 年龄&#xf…

智慧城市工程:相关学点、优势、未来发展

目录 相关学点&#xff1a; 智慧城市的优势 挑战与未来发展 智慧城市工程是利用现代信息技术和数据分析手段&#xff0c;提升城市管理和服务水平&#xff0c;实现城市运行的智能化、便捷化和高效化的一种新型城市发展模式。智慧城市通过整合物联网&#xff08;IoT&#xff0…

授权模型MAC

MAC&#xff08;Mandatory Access Control&#xff09;是一种授权模型&#xff0c;用于实现对系统资源访问的强制控制。在MAC模型中&#xff0c;授权是基于预先定义的安全策略&#xff0c;且该策略由系统管理员来配置和管理。 在MAC模型中&#xff0c;每个用户和每个资源都被赋…

看板工具助力餐饮与酒店行业实现数字化转型,提升管理与运营效率

在餐饮与酒店行业&#xff0c;服务质量和客户体验是衡量企业成功的关键因素。随着客户需求的不断多样化以及市场竞争的加剧&#xff0c;传统的管理模式逐渐难以满足高效运营的需求。尤其在高峰期&#xff0c;如何优化内部流程、提高服务效率和响应速度&#xff0c;成为了许多餐…

2024年CCF 非专业级软件能力认证CSP-J/S 第二轮( 提高组) 染色(color)

完整题目内容可前往下方链接&#xff1a; 染色&#xff08;color&#xff09;_C_嗨信奥-玩嗨信息奥林匹克竞赛-少儿编程题库学习中心https://www.hixinao.com/tiku/cpp/show-4118.html 若需更多真题&#xff0c;可前往题库中心查找&#xff0c;题库中心涵盖白名单赛事真题&am…

OpenIPC开源FPV之Adaptive-Link天空端代码解析

OpenIPC开源FPV之Adaptive-Link天空端代码解析 1. 源由2. 框架代码2.1 消息机制2.2 超时机制 3. 报文处理3.1 special报文3.2 普通报文 4. 工作流程4.1 Profile 竞选4.2 Profile 研判4.2.1 回退策略4.2.2 保持策略 4.3 Profile 应用 5. 总结6. 参考资料7. 补充资料7.1 RSSI 和 …

labelme标签批量转换数据集json_to_dataset

文章目录 labelme标签批量转换数据集json_to_dataset转换原理单张图片转换多张图片批量转换bat脚本循环法 标注图片提取标注图片转单通道 labelme标签批量转换数据集json_to_dataset 转自labelme批量制作数据集教程。 转换原理 在安装了labelme的虚拟环境中有一个labelme_js…

Apache Kylin最简单的解析、了解

官网&#xff1a;Overview | Apache Kylin 一、Apache Kylin是什么&#xff1f; 由中国团队研发具有浓厚的中国韵味&#xff0c;使用神兽麒麟&#xff08;kylin&#xff09;为名 的一个OLAP多维数据分析引擎:&#xff08;据官方给出的数据&#xff09; 亚秒级响应&#xff…

01云计算HCIA学习笔记

笔者今年7月底考取了华为云计算方向的HCIE认证&#xff0c;回顾从IA到IE的学习和项目实战&#xff0c;想整合和分享自己的学习历程&#xff0c;欢迎志同道合的朋友们一起讨论&#xff01; 第一章 云计算概述 ICT&#xff1a;ICT是世界电信协会在2001年的全球会议中提出的一个综…

php生成图片

前提 开启dg2库 去掉前面的;注释&#xff0c;有的可能会带.dll后缀影响不大 extensiongd2代码 <?php $file imagecreate(100,50); //先生成图片资源$color imagecolorallocate($file,255,255,255); //白色$c imagecolorallocate($file,0,100,255);imagefill($file,0…

免费GIS工具箱:轻松将glb文件转换成3DTiles文件

在GIS地理信息系统领域&#xff0c;GLB文件作为GLTF文件的二进制版本&#xff0c;主要用于3D模型数据的存储和展示。然而&#xff0c;GLB文件的使用频率相对较低&#xff0c;这是因为GIS系统主要处理的是地理空间数据&#xff0c;如地图、地形、地貌、植被、水系等&#xff0c;…

为何VisualRules更适合技术人员使用

什么是规则引擎 规则引擎是一种软件组件&#xff0c;它允许将业务规则从应用程序的核心代码中分离出来&#xff0c;以一种更加灵活、易于管理和维护的方式来定义、存储和执行这些规则。简单来说&#xff0c;它就像是一个专门处理规则的 “大脑”&#xff0c;可以根据预先设定的…

prometheus 搭建监控

prometheus 下载 prometheus-3.0.0.linux-amd64.tar.gztar -zxvf prometheus-3.0.0.linux-amd64.tar.gzmv prometheus-3.0.0.linux-amd64 prometheus-3vim /etc/systemd/system/prometheus.serviceprometheus.service [Unit] DescriptionPrometheus Wantsnetwork-online.t…

游戏何如防抓包

游戏抓包是指在游戏中&#xff0c;通过抓包工具捕获和分析游戏客户端与服务器之间传输的封包数据的过程。抓包工具可实现拦截、篡改、重发、丢弃游戏的上下行数据包&#xff0c;市面上常见的抓包工具有WPE、Fiddler和Charles Proxy等。 抓包工具有两种实现方式&#xff0c;一类…

RestTemplate实时接收Chunked编码传输的HTTP Response

学习调用AI接口的时候&#xff0c;流式响应都是使用的 Transfer-Encoding: chunked&#xff0c;图方便想用RestTemplate&#xff0c;但是平时用到的都是直接返回响应对象的类型。使用bing搜索到一种方式&#xff0c;使用下面的代码来读取&#xff0c;于是掉这个坑里了&#xff…

request.setAttribute()和session.setAttribute()的区别

request.setAttribute() 作用&#xff1a;request.setAttribute()是在一次请求内共享数据 解释&#xff1a;例如将一个数据保存request域中&#xff0c;然后请求转发至前端页面&#xff0c;则数据转发至前端页面后会被自动销毁。简单点说就是&#xff0c;数据只能用一次就不能…

Java中的Consumer接口应该如何使用(通俗易懂图解)

应用场景&#xff1a; 第一次程序员A写好了个基础的遍历方法&#xff1a; public class Demo1 {public static void main(String[] args) {//假设main方法为程序员B写的,此时需要去调用A写好的一个遍历方法//1.如果此时B突然发现想将字符串以小写的形式打印出来&#xff0c;则…

【常微分方程讲义1.1】方程的种类发展与完备

方程在数学历史中不断发展&#xff0c;逐步趋于完备。从最初的简单代数方程到包含函数、算子甚至泛函的更复杂方程&#xff0c;数学家通过不断的扩展和深化&#xff0c;逐渐建立起更为丰富和多元的方程类型体系。方程的种类之所以不断演变&#xff0c;部分是因为解决实际问题的…