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

时间:2016-11-30 19:14:34

标签: javascript

我有一个带有数据的 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

2 个答案:

答案 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;
&#13;
&#13;