JS-条件属性选择

时间:2018-11-15 12:06:40

标签: javascript

我有两个具有以下结构的数组:

第一本字典:

 [{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

问题是如何有条件地访问对象属性?也许有比这更好的方法了?如果没有,我在做什么错?

2 个答案:

答案 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的属性,这就是您遇到此错误的原因。