今天意外發現自己寫的bug,查了以後發現就是因為比較習慣了PHP的用法,無意間就自己挖了一個坑(?)
前情提要一下,目前的環境有要求我們將型態帶在變數前面
一般我們常用PHP增加資料到Array的方式
$arrData = [];
foreach ($arrDataSource as $key => $value) {
$arrData[$key] = $value;
}
又或是
$arrData = [];
foreach ($source as $value) {
$arrData[] = $value;
}
這兩個出來的差別
["key1" => "value1", "key2" => "value"...]
["value1","value2"......]
當我們需要知道陣列長度的時候,就是快樂的count即可
echo count($arrData);
於是我寫JS的時候,做了以下的事情
let arr = [];
for(attr in objDataset)
{
if(attr == "某條件")
{
arr[attr] = objDataset[attr];
}
}
if(arr.length == 0)
{
// do something
}
乍看之下,完全沒發現自己做了什麼蠢事,當debug的時候才發現,為什麼arr.length == 0
永遠都成立??
一回頭檢查才發現,在我放值進去的時候,arr默默轉成object了????
所以直接就是undefined,永遠都進了do something那段=..=
紀念一下算是真正被JS無形別雷到的我
調整方法有以下幾個
- 乾脆把值塞成一個物件,最後轉成Array,這樣就可以繼續用length看Array的長度了
let obj = {};
for(attr in objDataset)
{
if(attr == "某條件")
{
obj[attr] = objDataset[attr];
}
}
var arrKeylist = Object.entries(obj);
/**
[
["name", "John"],
["age", 30],
["gender", "male"]
]
*/
// 長度 arrKeylist.length
- 也可塞成一個Object裡面,用Object.keys把key值轉array,這樣也可以看長度
let obj = {};
for(attr in objDataset)
{
if(attr == "某條件")
{
obj.attr = objDataset[attr];
}
}
// { a: 1, b: 2, c: 3 }
// 長度 Object.keys(obj).length