我有一个带有数据的 CSV 文件,我将通过这些数据创建包含数据的对象数组。其中一个字段的格式为" 0x"其中x是数字。它应该映射到颜色的名称。我为这个映射设置了一个带有键/值对的对象,但出于某种原因我无法使其工作。我得到Undefined
。
这段代码只是一个简短的版本,但它说明了我的问题。我发现由于某种原因,myObj.value
和splitData[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 :(得分: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]);
答案 1 :(得分: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>
&#13;