Javascript 使用其他对象的键查找对象中的键/值
我有一个包含数据的CSV文件,我使用这些数据创建了一个对象数组。其中一个字段的格式为“0x”,其中x是一个数字。它应该映射到一种颜色的名称。我为此映射设置了一个具有键/值对的对象,但由于某些原因,我无法使其工作。我只是得到了Javascript 使用其他对象的键查找对象中的键/值,javascript,Javascript,我有一个包含数据的CSV文件,我使用这些数据创建了一个对象数组。其中一个字段的格式为“0x”,其中x是一个数字。它应该映射到一种颜色的名称。我为此映射设置了一个具有键/值对的对象,但由于某些原因,我无法使其工作。我只是得到了未定义的 这段代码只是一个简短的版本,但它说明了我的问题。我发现由于某种原因,myObj.value和splitData[2]中的值不等于05,但这是它的值。所有3个都是字符串类型,所以我不明白为什么会发生这种情况 var lookup = { "01": "ONE",
未定义的
这段代码只是一个简短的版本,但它说明了我的问题。我发现由于某种原因,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
拆分数据时,splitdata[2]
是“05”
不是05
(请注意引号)。因此,当您执行查找[splitdata[2]]
时,它将引号视为字符文字。这意味着它实际上是在寻找“05”
由于您是从CSV获取数据,因此我假设您无法更改它。因此,我建议您在比较之前替换任何引用
myObj.value = splitData[2].replace(/\"/g, '') // remove all quotes
console.log(lookup[myObj.value)
var查找={
“01”:“一”,
“02”:“两个”,
"03":"三",,
“04”:“四个”,
“05”:“五”
};
var dataFromExternalSource='1,“颜色”,“05”'
var splitData=dataFromExternalSource.split(“,”);
var myObj={};
myObj.id=splitData[0];
myObj.name=splitData[1];
myObj.value=splitData[2]。替换(/\“/g'”);
console.log(myObj.value);
console.log(查找[“05”]);
console.log(lookup[myObj.value]);
当您分割数据时,splitdata[2]
是“05”
而不是05
(注意引号)。因此,当您进行lookup[splitdata[2]
时,它将引号视为字符文字。这意味着它实际上是在寻找“05”
由于您是从CSV获取数据,我假设您无法更改它。因此,我建议您在比较之前替换任何引号
myObj.value = splitData[2].replace(/\"/g, '') // remove all quotes
console.log(lookup[myObj.value)
var查找={
“01”:“一”,
“02”:“两个”,
"03":"三",,
“04”:“四个”,
“05”:“五”
};
var dataFromExternalSource='1,“颜色”,“05”'
var splitData=dataFromExternalSource.split(“,”);
var myObj={};
myObj.id=splitData[0];
myObj.name=splitData[1];
myObj.value=splitData[2]。替换(/\“/g'”);
console.log(myObj.value);
console.log(查找[“05”]);
log(查找[myObj.value])代码>双引号是字符串的一部分,通过检查长度可以看出
console.log("05".length); // length = 2
console.log(splitData[2].length); //length = 4
一种解决方案是通过使用JSON.parse
var查找={
“01”:“一”,
“02”:“两个”,
"03":"三",,
“04”:“四个”,
“05”:“五”
};
$(“#clicky”)。单击(函数(){
var dataFromExternalSource='1','color','05\'
var splitData=dataFromExternalSource.split(“,”);
控制台。日志(“05”。长度);
console.log(splitData[2].length);
var myObj={};
myObj.id=splitData[0];
myObj.name=splitData[1];
myObj.value=splitData[2];
console.log(查找[“05”]);
log(查找[JSON.parse(splitData[2]));
});代码>
clickme
双引号是字符串的一部分,您可以通过检查长度来查看
console.log("05".length); // length = 2
console.log(splitData[2].length); //length = 4
一种解决方案是通过使用JSON.parse
var查找={
“01”:“一”,
“02”:“两个”,
"03":"三",,
“04”:“四个”,
“05”:“五”
};
$(“#clicky”)。单击(函数(){
var dataFromExternalSource='1','color','05\'
var splitData=dataFromExternalSource.split(“,”);
控制台。日志(“05”。长度);
console.log(splitData[2].length);
var myObj={};
myObj.id=splitData[0];
myObj.name=splitData[1];
myObj.value=splitData[2];
console.log(查找[“05”]);
log(查找[JSON.parse(splitData[2]));
});代码>
clickme
看起来,您正在尝试比较字符串05和“05”-请注意,第一个仅为05,另一个也包含引号。试试VarDataFromExternalSource='1,color,05',当然,它必须非常明显。我现在觉得自己很笨。出于某种原因,我认为“05”的控制台输出仅仅意味着它是一个带有05的字符串,我没有考虑字符串本身有引号。感谢所有3位!当我得到3个同样有用的答案时,我不知道该怎么办。这是我在这里的第一个问题。看起来,你正在比较字符串05和“05”-注意,第一个只是05,另一个也包含引号。试试VarDataFromExternalSource='1,color,05',当然,它必须非常明显。我现在觉得自己很笨。出于某种原因,我认为“05”的控制台输出仅仅意味着它是一个带有05的字符串,我没有考虑字符串本身有引号。感谢所有3位!当我得到3个同样有用的答案时,我不知道该怎么办。这是我在这里的第一个问题。