判斷數據是否為空,對象是否存在某屬性,屬性值是否為空,對大數據進行換算,對單位進行轉換.
目錄
?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
函數的各種輸入情況進行示例和結果展示:
數組為空
- 輸入:
formatData([])
- 結果:
--
數組包含空對象
- 輸入:
formatData([{}])
- 結果:
--
數組包含有效對象
- 輸入:
formatData([{name: 'John Doe', age: 30}])
- 結果:
{name: 'John Doe', age: 30}
數組包含單個非對象值
- 輸入:
formatData([42])
- 結果:
42.00
數組包含多個對象,處理第一個對象
- 輸入:
formatData([{name: 'John Doe'}, {name: 'Jane Doe'}])
- 結果:{ name: 'John Doe' }
傳入單個對象,指定字段名
- 輸入:
formatData({name: 'John Doe', age: 30}, 'name')
- 結果:
John Doe
傳入單個對象,未指定字段名
- 輸入:
formatData({name: 'John Doe', age: 30})
- 結果:
{name: 'John Doe', age: 30}
傳入單個對象,指定字段名但字段不存在
- 輸入:
formatData({name: 'John Doe', age: 30}, 'email')
- 結果:--
傳入單個空對象
- 輸入:
formatData({})
- 結果:
--
傳入單個字符串
- 輸入:
formatData('Hello World')
- 結果:
Hello World
傳入空字符串
- 輸入:
formatData('')
- 結果:
--
傳入數值字符串
- 輸入:formatData('123.456',null,false)
- 結果??
123
- 輸入:formatData('123.456')
- 結果??
123.46
傳入空數組對象
- 輸入:
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
函數的各種輸入情況進行示例和結果展示:
輸入為
null
- 輸入:
isEmpty(null)
- 結果:
true
輸入為
undefined
- 輸入:
isEmpty(undefined)
- 結果:
true
輸入為空字符串
- 輸入:
isEmpty('')
- 結果:
true
輸入為僅包含空格的字符串
- 輸入:
isEmpty(' ')
- 結果:
true
輸入為非空字符串
- 輸入:
isEmpty('Hello World')
- 結果:
false
輸入為空數組
- 輸入:
isEmpty([])
- 結果:
true
輸入為非空數組
- 輸入:
isEmpty([1, 2, 3])
- 結果:
false
輸入為空對象
- 輸入:
isEmpty({})
- 結果:
true
輸入為非空對象
- 輸入:
isEmpty({name: 'John Doe', age: 30})
- 結果:
false
輸入為包含空對象的數組
- 輸入:
isEmpty([{}, {}])
- 結果:
false
輸入為包含空字符串的對象
- 輸入:
isEmpty({name: '', age: 30})
- 結果:
false
輸入為數值
0
- 輸入:
isEmpty(0)
- 結果:
true
- 輸入為數值為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
函數的各種輸入情況進行示例和結果展示:
輸入為
null
- 輸入:
isEmpty2(null)
- 結果:
true
輸入為
undefined
- 輸入:
isEmpty2(undefined)
- 結果:
true
輸入為數值
0
- 輸入:
isEmpty2(0)
- 結果:
true
輸入為空字符串
- 輸入:
isEmpty2('')
- 結果:
true
輸入為僅包含空格的字符串
- 輸入:
isEmpty2(' ')
- 結果:
true
輸入為數值為0的字符串
- 輸入:
isEmpty2('0')
- 結果:
true
輸入為非空字符串
- 輸入:
isEmpty2('Hello World')
- 結果:
false
輸入為空數組
- 輸入:
isEmpty2([])
- 結果:
true
輸入為非空數組
- 輸入:
isEmpty2([1, 2, 3])
- 結果:
false
輸入為空對象
- 輸入:
isEmpty2({})
- 結果:
true
輸入為非空對象
- 輸入:
isEmpty2({name: 'John Doe', age: 30})
- 結果:
false
輸入為包含空對象的數組
- 輸入:
isEmpty2([{}, {}])
- 結果:
false
輸入為包含0的數組
- 輸入:
isEmpty2([0])
- 結果:false
輸入為包含數值為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;}
對象具有指定名稱的非空屬性
- 輸入:
hasNonEmptyProperty({name: 'John Doe'}, 'name')
- 結果:
true
對象具有指定名稱但屬性值為空字符串
- 輸入:
hasNonEmptyProperty({name: ''}, 'name')
- 結果:
false
對象具有指定名稱但屬性值為
null
- 輸入:
hasNonEmptyProperty({name: null}, 'name')
- 結果:
false
對象具有指定名稱但屬性值為
undefined
- 輸入:
hasNonEmptyProperty({name: undefined}, 'name')
- 結果:
false
對象沒有指定名稱的屬性
- 輸入:
hasNonEmptyProperty({age: 30}, 'name')
- 結果:
false
對象具有指定名稱且屬性值為非空字符串,但屬性名稱不匹配
- 輸入:
hasNonEmptyProperty({name: 'John Doe'}, 'username')
- 結果:
false
對象具有指定名稱且屬性值為
0
(根據函數當前邏輯,0
被視為非空)
- 輸入:
hasNonEmptyProperty({count: 0}, 'count')
- 結果:
true
對象具有指定名稱且屬性值為
false
(根據函數當前邏輯,false
被視為非空)
- 輸入:
hasNonEmptyProperty({isActive: false}, 'isActive')
- 結果:
true
4.判斷值是否為空(包括字符串、數值類型)?
//導出公共函數 判斷是否為空
export function isNullorEmpty (str) {return (str === '' || str == '--'|| str === null || str === undefined || isNaN(str));
}
以下是對
isNullorEmpty
函數的各種輸入情況進行示例和結果展示:
輸入為空字符串
- 輸入:
isNullorEmpty('')
- 結果:
true
輸入為字符串'--'
- 輸入:
isNullorEmpty('--')
- 結果:
true
輸入為
null
- 輸入:
isNullorEmpty(null)
- 結果:
true
輸入為
undefined
- 輸入:
isNullorEmpty(undefined)
- 結果:
true
輸入為數字0
- 輸入:
isNullorEmpty(0)
- 結果:false
輸入為布爾值
false
- 輸入:
isNullorEmpty(false)
- 結果:false
輸入為字符串'0'
- 輸入:
isNullorEmpty('0')
- 結果:
false
輸入為有效數字字符串
- 輸入:
isNullorEmpty('123')
- 結果:
false
輸入為NaN
- 輸入:
isNullorEmpty(NaN)
- 結果:
true
(因為isNaN(NaN)
返回true
)輸入為有效數字
- 輸入:
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
函數的各種可能性進行示例和結果展示
輸入為空字符串
- 輸入:
TransNumber('')
- 結果:
'--'
輸入為特定標記字符串'--'
- 輸入:
TransNumber('--')
- 結果:
'--'
輸入為
null
- 輸入:
TransNumber(null)
- 結果:
'--'
輸入為
undefined
- 輸入:
TransNumber(undefined)
- 結果:
'--'
輸入為NaN
- 輸入:
TransNumber(NaN)
- 結果:
'--'
輸入為正整數字符串'1000'
- 輸入:
TransNumber('1000')
- 結果:
'1.00'
輸入為負整數字符串'-1000'
- 輸入:
TransNumber('-1000')
- 結果:
'-1.00'
輸入為浮點數字符串'1234.56'
- 輸入:
TransNumber('1234.56')
- 結果:
'1.23'
輸入為包含非數字字符的字符串'abc123'
- 輸入:
TransNumber('abc123')
- 結果:
'--'
輸入為數字0
- 輸入:
TransNumber(0)
- 結果:
'0.00'
)輸入為負數-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
函數的各種可能性進行示例和結果展示
輸入為空字符串
- 輸入:
formatNumber('')
- 結果:
'--'
輸入為特定標記字符串'--'
- 假設
isNullorEmpty('--')
返回true
(注意:這個函數的實際實現并未給出,因此這里基于假設)- 輸入:
formatNumber('--')
- 結果:
'--'
輸入為
null
- 輸入:
formatNumber(null)
- 結果:
'--'
輸入為
undefined
- 輸入:
formatNumber(undefined)
- 結果:
'--'
輸入為正整數1234
- 輸入:
formatNumber(1234)
- 結果:
'1234.00'
輸入為負整數-12345
- 輸入:
formatNumber(-12345)
- 結果:
'
-1.23萬'
輸入為浮點數1234567.89
- 輸入:
formatNumber(1234567.89)
- 結果:
'123.46萬'
輸入為極大整數987654321
- 輸入:
formatNumber(987654321)
- 結果:
'9.88億'
輸入為極小負數-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
函數,并列出所有可能性的示例和結果。
輸入為空字符串
- 輸入:
formatNumber2('')
- 結果:
'--'
輸入為特定標記字符串'--'
- 輸入:
formatNumber2('--')
- 結果:
'--'
輸入為
null
- 輸入:
formatNumber2(null)
- 結果:
'--'
輸入為
undefined
- 輸入:
formatNumber2(undefined)
- 結果:
'--'
輸入為正整數小于10000
- 輸入:
formatNumber2(5000)
- 結果:
5000
輸入為負整數小于10000
- 輸入:
formatNumber2(-5000)
- 結果:
-5000
輸入為正整數大于等于10000且小于100000000
- 輸入:
formatNumber2(50000000)
- 結果:
5000萬
輸入為負整數大于等于10000且小于100000000
- 輸入:
formatNumber2(-50000000)
- 結果:
-5000萬
輸入為正整數大于等于100000000
- 輸入:
formatNumber2(1234567890)
- 結果:
12億
輸入為負整數大于等于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
type
?為?'1'
:
formatMyElectNumber(1234, '1')
?返回?'1234.00'
formatMyElectNumber(-5678, '1')
?返回?'-5678.00'
formatMyElectNumber('123.45', '1')
?返回?'123.45'
formatMyElectNumber(null, '1')
?返回?'--'
type
?為?'2'
:
formatMyElectNumber(1234, '2')
?返回?'1.23'
formatMyElectNumber(-5678, '2')
?返回?'-5.68'
formatMyElectNumber('678.90', '2')
?返回?'0.68'
type
?為?'3'
:
formatMyElectNumber(1234567, '3')
?返回?'1.23'
formatMyElectNumber(-8901234, '3')
?返回?'-8.90'
formatMyElectNumber('987654.32', '3')
?返回?'0.99'
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="請輸入數字(包括小數點和負數)"/>