Javascript 尝试将新的键/值对推送到数组不工作

Javascript 尝试将新的键/值对推送到数组不工作,javascript,angularjs,Javascript,Angularjs,我试图使用angular.forEach将用户的第一个和最后一个首字母推送到用户联系信息的对象数组,但我做得不对 以下是我的代码: var firstInit = ''; var lastInit = ''; angular.forEach(self.contacts, function(value, key){ firstInit = key.first_name.charAt(0); lastInit = key.last_name.charAt(0); this.push(f

我试图使用angular.forEach将用户的第一个和最后一个首字母推送到用户联系信息的对象数组,但我做得不对

以下是我的代码:

var firstInit = '';
var lastInit = '';

angular.forEach(self.contacts, function(value, key){
  firstInit = key.first_name.charAt(0);
  lastInit = key.last_name.charAt(0);
  this.push(firstInit + ':' + lastInit);
});
但我得到了TypeError:无法读取未定义的属性'charAt'

有什么建议吗

更新:

我将代码改为下面的代码,现在我可以得到值,但是当我尝试推到contacts对象上时,我得到的“推”不是一个函数。虽然如果我去掉“key”,我可以推送首字母,但它们在数组的根上,而不是我希望它们在每个对象中的位置

代码如下:

var firstInit = '';
var lastInit = '';

angular.forEach(self.contacts, function(value, key){

    firstInit = self.contacts[key].first_name.charAt(0);
    lastInit = self.contacts[key].last_name.charAt(0);

    self.contacts[key].push(firstInit + lastInit);

});

key.first\u name
key.last\u name
在您的联系人中未定义。这是一个可能的解决方案:

var firstInit = '';
var lastInit = '';

angular.forEach(self.contacts, function(value, key){
  if (key.first_name)
    firstInit = key.first_name.charAt(0);
  if (key.last_name)
    lastInit = key.last_name.charAt(0);
  this.push(firstInit + ':' + lastInit);
});
以下是修复方法:

var inits = '';
var newContacts = [];

angular.forEach(self.contacts, function(value, key){
  console.log(value.first_name);
  inits = self.contacts[key].first_name.charAt(0) + self.contacts[key].last_name.charAt(0);
  value.userInitials = inits;
  newContacts.push(value);
});

或者,我可以使用“value”而不是获取索引/键。这给了我名字字段。我创建了一个新的对象数组并按下了值。我用点符号添加了新的键/值对。

plz在声明和/或操作
first_name
last_name
的地方发布代码。在将值分配给
firstInit
之前,放置
console.log(key.first_name)
,很可能是
键。未定义的
中的first\u name
类型错误:无法读取未定义的
的属性'charAt'表示
键。first\u name
未定义
key
可能是一个字符串而不是对象。
self.contacts
是数组,将具有
push
功能
self.contacts[key]
是数组中的一项,不具有
push
功能。请通读一遍谢谢,马特。我已经想出了部分解决办法。查看我的编辑。感谢你在这方面的帮助!没问题。你到底想用这些首字母做什么?看起来您正试图将它们推回到从中获取它们的数组的顶部,只是在一个不同的索引中。你的目标是什么?了解每个contacts对象的外观可能会有所帮助。