2016-11-30 150 views
0

我有一個CSV文件與數據,我通過創建與數據的對象數組。其中一個字段的格式爲「0x」,其中x是一個數字。它應該映射到顏色的名稱。我爲這個映射設置了一個具有鍵/值對的對象,但由於某種原因,我無法讓它工作。我只是得到Undefined查找對象中的鍵/值與其他對象的鍵

此代碼只是一個簡短的版本,但它說明了我的問題。我看到由於某種原因,myObj.valuesplitData[2]中的值不等於05,但這是它的值。所有3個也是字符串的類型,所以我不明白爲什麼會發生這種情況?

var lookup = { 
    "01": "ONE", 
    "02": "TWO", 
    "03": "THREE", 
    "04": "FOUR", 
    "05": "FIVE" 
}; 



$("#clicky").click(function(){ 
    var dataFromExternalSource = '1,"color","05"' 
    var splitData = dataFromExternalSource.split(","); 

    var myObj = {}; 
    myObj.id = splitData[0]; 
    myObj.name = splitData[1]; 
    myObj.value = splitData[2]; 

    console.log(lookup["05"]); 
    console.log(lookup[splitData[2]]); 
    console.log(myObj.value); 
    console.log(lookup[splitData[myObj.value]]); 
    console.log(splitData[2] === "05"); 
    console.log(myObj.value === "05"); 
    console.log("typeof: " + typeof(myObj.value) + " - " + typeof(splitData[2]) + " - " + typeof("5")); 
}); 

輸出:

FIVE 
undefined 
"05" 
undefined 
false 
false 
typeof: string - string - string 
+0

,因爲它似乎,你想比較字符串05和「05」 - 注意,首先一個就是05年,等一個包含引號爲好。嘗試var dataFromExternalSource ='1,color,05' – user1702401

+0

當然,它必須是如此明顯。我現在覺得很愚蠢。出於某種原因,我認爲「05」的控制檯輸出僅僅意味着它是一個帶有05的字符串,我不認爲字符串本身帶有引號。感謝所有3!當我得到3個同樣有用的答案時,不知道該怎麼做。這是我在這裏的第一個問題。 – ThomasRee

回答

1

雙引號是字符串的一部分,你可以看到,通過檢查長度

console.log("05".length); // length = 2 
console.log(splitData[2].length); //length = 4 

一個解決辦法是通過消除對實例的引用使用JSON.parse

var lookup = { 
 
    "01": "ONE", 
 
    "02": "TWO", 
 
    "03": "THREE", 
 
    "04": "FOUR", 
 
    "05": "FIVE" 
 
}; 
 

 

 

 
$("#clicky").click(function() { 
 
    var dataFromExternalSource = '1,"color",\"05\"' 
 
    var splitData = dataFromExternalSource.split(","); 
 
    console.log("05".length); 
 
    console.log(splitData[2].length); 
 
    var myObj = {}; 
 
    myObj.id = splitData[0]; 
 
    myObj.name = splitData[1]; 
 
    myObj.value = splitData[2]; 
 

 
    console.log(lookup["05"]); 
 
    console.log(lookup[JSON.parse(splitData[2])]); 
 

 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<button id="clicky">clickme</button>

1

當你分割數據splitdata[2]"05"05(注意報價)。所以,當你做lookup[splitdata[2]]時,它將引號視爲字符文字。這意味着它實際上正在尋找""05""

既然您從CSV獲取數據,我假設您無法更改它。因此,我建議您在比較之前替換任何引號。

myObj.value = splitData[2].replace(/\"/g, '') // remove all quotes 
console.log(lookup[myObj.value) 

var lookup = { 
 
"01": "ONE", 
 
"02": "TWO", 
 
"03": "THREE", 
 
"04": "FOUR", 
 
"05": "FIVE" 
 
}; 
 

 

 

 
var dataFromExternalSource = '1,"color","05"' 
 
var splitData = dataFromExternalSource.split(","); 
 

 
var myObj = {}; 
 
myObj.id = splitData[0]; 
 
myObj.name = splitData[1]; 
 
myObj.value = splitData[2].replace(/\"/g, ''); 
 

 
console.log(myObj.value); 
 
console.log(lookup["05"]); 
 
console.log(lookup[myObj.value]);