let test = [];
d3.csv("cgvList.csv", function (data) {
if (data.poi_nm == "CGV") {
let obj = {};
obj.content = '<div>' data.branch_nm '</div>';
test.push(obj);
}
});
console.log(test);
console.log("test[0] : " test[0]);
console.log("test.length : " test.length);
[enter image description here][1]
我將 csv 檔案制作成一個物件陣列。
并且由于輸出陣列,陣列輸出很好,
在這里輸入影像描述
但是輸出索引0時,undefined出來了,陣列的長度也為0。
從控制臺列印時正確列印。
有什么問題?
在此處輸入影像描述
uj5u.com熱心網友回復:
如果沒有 jsfiddle 或沙箱可以玩,我無法確切地知道發生了什么,但我相信正在發生的是兩件事的混合:
d3.csv是一個異步函式,因此回傳一個承諾。- 您傳遞給
d3.csv的函式應該告訴函式如何決議 csv 中的每個元素,并且應該回傳決議的物件,而不是將其添加到外部陣列或類似的東西中。您在該函式中回傳的每個元素都將是結果陣列中的一個元素
有(至少)兩種可能的方法可以解決這個問題:
awaitasync 函式,它的回傳值將是您需要的值,例如
const test = await d3.csv("cgvList.csv", function (data) {
if (data.poi_nm == "CGV") {
let obj = {};
obj.content = '<div>' data.branch_nm '</div>';
return obj;
}
});
console.log(test);
console.log("test[0] : " test[0]);
console.log("test.length : " test.length);
請注意,這里傳遞給的函式d3.csv以您想要格式化的方式回傳物件!
- 在陳述句中執行您的邏輯,該
.then陳述句也等待承諾被履行:
d3.csv("cgvList.csv", function (data) {
if (data.poi_nm == "CGV") {
let obj = {};
obj.content = '<div>' data.branch_nm '</div>';
return obj;
}
}).then((test) => {
console.log(test);
console.log("test[0] : " test[0]);
console.log("test.length : " test.length);
});
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/482527.html
