我有两个具有以下结构的数组:
第一本字典:
[{id: 111, abbr: "FBI", name: "Federal Burreau of Investigation"},
{id: 59, abbr: "CIA", name: "Central Intelligence Agency"},
{id: 130, abbr: "EU", name: "European Union"}]
第二本字典:
[{id: 28, name: "Administration"},
{id: 107, name: "Advocacy"},
{id: 100, name: "Agriculture"},
{id: 77, name: "Air & Aviation"}]
我正在尝试创建一个分隔符函数,该函数以下列方式访问这些对象:
finalDictionary.push({ delimiter: dictionary[0].abbr.charAt(0) });
并相应地:
finalDictionary.push({ delimiter: dictionary[i].name.charAt(0) });
我的目标是使该方法通用,并减少最终代码的数量。如您所见,这里唯一的区别是我访问字典'abbr'和'name'的属性。我尝试通过以下方式进行操作:
var ext = (name === 'agencies') ? 'abbr' : 'name';
finalDictionary.push({ delimiter: dictionary[i].ext.charAt(0) });
但是,我得到一个错误:
TypeError: Cannot read property 'charAt' of undefined
问题是如何有条件地访问对象属性?也许有比这更好的方法了?如果没有,我在做什么错?
答案 0 :(得分:4)
问题出在这一行:
dictionary[i].ext.charAt(0)
dictionary[i].ext
假设您在ext
中拥有属性dictionary[i]
,而您没有该属性,因此它返回undefined。
比undefined.charAt(0)
发生的错误要多得多
将其更改为:
dictionary[i][ext].charAt(0)
这里的属性是ext
的值,它是'abbr'
或'name'
答案 1 :(得分:0)
在您显示的示例json中没有名为ext
的属性,这就是您遇到此错误的原因。