foreach键和值输入参数javascript

时间:2015-07-25 16:27:57

标签: javascript foreach

我对使用键和值对的foreach循环语法感到困惑。所以我有一个对象和一个foreach循环,类似于下面的例子。在我的情况下,我的对象,价值和关键是什么?如果我想将加拿大名称改为中国,我该怎么办?

阵列

 $scope.tempData = [];

变量:

var data = [{name: "Kevin", country: "Canada"}, {name:"Bob", country: "Spain"}];


     $scope.editedDetails = function () {

           angular.forEach(object,
     function(value, key) { 

     });

    };

1 个答案:

答案 0 :(得分:1)

在您的情况下,您遍历一个对象数组,因此该值将是每个索引处的对象,并且键将是索引值(即0,1,...)。您希望为data传递object

var data = [{name: "Kevin", country: "Canada"}, {name:"Bob", country: "Spain"}];

angular.forEach(data, function (value, key) {
  // Key will be 0 or 1
  if (value.country === 'Canada') {
    value.country = 'China';
  }
});

由于对象是通过JavaScript引用传递的,因此您可以直接编辑每个对象的属性,即value.country === 'China'将更改实际数组中的对象。

但是,您只能更改对象的属性,如果您尝试覆盖整个对象,则无法使用。

var data = [{name: "Kevin", country: "Canada"}, {name:"Bob", country: "Spain"}];

angular.forEach(data, function (value, key) {
  if (value.country === 'Canada') {
    // This won't update the object in data.
    value = {
      name: value.name,
      country: 'China'
    };
  }
});

如果您正在迭代具有非对象类型的对象,则必须使用该键并直接编辑该对象,并且在传递对象的情况下,该键将是该对象中的实际键。

var nyc = { name: 'New York City', state: 'NY' };

angular.forEach(nyc, function (value, key) {
  if (key === 'state') {
    nyc[key] = 'New York'; // Or, nyc.state since we know what it is
  }
});