我很難弄清楚如何訪問我的 javascript 物件的屬性。
我有一個 Node JS 應用程式,它從 WHO 下載一個帶有 covid 資料的 CSV 檔案,然后我遍歷每個條目。以下是我遍歷每個 CSV 條目的方法:
fs.createReadStream("data.csv")
.pipe(csv())
.on("data", (data) => {
//process data
})
.on("end", () => {
});
這是我運行時的輸出示例 console.log(data)
{
'?Name': 'Niger',
'WHO Region': 'Africa',
'Cases - cumulative total': '6203',
'Cases - cumulative total per 100000 population': '25.63',
'Cases - newly reported in last 7 days': '64',
'Cases - newly reported in last 7 days per 100000 population': '0.26',
'Cases - newly reported in last 24 hours': '10',
'Deaths - cumulative total': '205',
'Deaths - cumulative total per 100000 population': '0.85',
'Deaths - newly reported in last 7 days': '1',
'Deaths - newly reported in last 7 days per 100000 population': '0',
'Deaths - newly reported in last 24 hours': '0'
}
如果我跑步,typeof data我會得到object.
我想訪問這個物件的一些屬性。如果我輸出,data["WHO Region"]我會得到“非洲”。所以這是有效的。
但是,我無法訪問這些物件的名稱。
console.log(data["Name"]);
console.log(data.hasOwnProperty("Name"));
分別輸出undefined和false
即使 name 屬性存在于物件中。
我還嘗試使用 Object.keys(data) 列出物件的鍵,結果如下:
[ 'Name', 'WHO Region', 'Cases - cumulative total', ... ]
所以顯然鍵 Name 確實存在,但由于某種原因我無法訪問它。我在那里錯過了什么嗎?
uj5u.com熱心網友回復:
您Name在物件的屬性中有不可見的符號。如果您過去console.log在瀏覽器控制臺中的結果,您可以看到它:

檢查您的原始 CSV 檔案并搜索此不可見字符。
編輯:此符號是檔案
uj5u.com熱心網友回復:
該問題是由檔案開頭的
您的代碼的一個簡單解決方法是像這樣替換它:
const results = [];
fs.createReadStream('data.csv')
.pipe(csv())
.on('data', (data) => {
// Replace BOM in key
const key1 = Object.keys(data)[0];
data = { ...data, [key1.replace(/\uFEFF/, '')]: data[key1] };
results.push(data);
})
.on('end', () => {
results.forEach(result => {
console.log(`Name: ${result["Name"]}`);
})
});
或者
您可以在 Nodepad 中打開檔案并使用Encoding選單將其從 UTF-8-BOM 更改為 UTF-8 并保存。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/334133.html
標籤:javascript json 目的 特性
