Javascript 使用其他对象的键查找对象中的键/值

Javascript 使用其他对象的键查找对象中的键/值,javascript,Javascript,我有一个包含数据的CSV文件,我使用这些数据创建了一个对象数组。其中一个字段的格式为“0x”,其中x是一个数字。它应该映射到一种颜色的名称。我为此映射设置了一个具有键/值对的对象,但由于某些原因,我无法使其工作。我只是得到了未定义的 这段代码只是一个简短的版本,但它说明了我的问题。我发现由于某种原因,myObj.value和splitData[2]中的值不等于05,但这是它的值。所有3个都是字符串类型,所以我不明白为什么会发生这种情况 var lookup = { "01": "ONE",

我有一个包含数据的CSV文件,我使用这些数据创建了一个对象数组。其中一个字段的格式为“0x”,其中x是一个数字。它应该映射到一种颜色的名称。我为此映射设置了一个具有键/值对的对象,但由于某些原因,我无法使其工作。我只是得到了
未定义的

这段代码只是一个简短的版本,但它说明了我的问题。我发现由于某种原因,
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个同样有用的答案时,我不知道该怎么办。这是我在这里的第一个问题。