使用foreach在数组上推送数据时遇到困难

时间:2015-06-09 11:00:30

标签: javascript arrays angularjs foreach

我正在使用以下示例

https://docs.angularjs.org/api/ng/directive/ngController

在上面提到的例子中,我添加了一个名为save的新按钮。 在保存中,我试图将所有联系人推送到一个数组中。 以下是我的保存代码。

$scope.SaveContact = function () {

    var len = $scope.contacts.length;
    var contactlist = [];
    angular.foreach($scope.contacts, function (value, key) {
        contactlist.push( value.type + ':' + key);
    }, contactlist);

    console.log(contactlist);

};

有人可以帮我解决这个问题。

2 个答案:

答案 0 :(得分:0)

尝试以下

var contactlist = [];
angular.forEach($scope.contacts, function(value, key) {
  this.push(key + ': ' + value);
}, contactlist);

如果value.type存在,您可以使用this.push(key + ': ' + value.type);

答案 1 :(得分:0)

你应该先修复.foreach的拼写。

由于您在迭代数组,因此键将是索引,值将是存储在数组中的对象。你也在做一个字符串连接(键+":" +值)所以你会得到一个像这样的数组:

["0, [Object Object]", "1, [Object Object]", ...]

我建议使用Array原型.forEach而不是angular .forEach,因为你不需要使用键(在这种情况下是数组索引)。

$scope.SaveContact = function () {

  var contactlist = [];
  $scope.contacts.forEach(function(contact) {
    contactlist.push(contact.type + ":" + contact.value);
  });

  console.log(contactlist);

};

如果你想使用angular.forEach,我会说:

angular.forEach($scope.contacts, function(value, key) {
  this.push(value.type + ': ' + value.value);
}, contactlist);

但我不推荐它,因为很容易将angular.forEach回调中的value参数与"值"混淆。存储在$ scope.contacts数组中的对象的键。

我假设您使用角度文档中的$ scope.contacts格式:

$scope.contacts = [
  {type:'phone', value:'408 555 1212'},
  {type:'email', value:'john.smith@example.org'} ];

这样,你应该得到一个这样的数组:

["phone:408 555 1212","email:john.smith@example.org"];

另外,我建议使用$ scope.contactlist而不是var contactlist,因此可以在SaveContact函数之外访问该列表。