如何使用循环在javascript中创建obj

时间:2017-05-03 13:04:29

标签: javascript

我的目标是创造这样的东西

  $rootScope.customMarkers = [
          {address: "1600 pennsylvania ave, washington DC", "class": "my1"},
          {address: "600 pennsylvania ave, washington DC",  "class": "my2"},
  ];

以下是我的代码的一部分,但这不起作用

  for (var i = 0; i < cart.length; i++) {
    $rootScope.customMarkers = [{
        address: cart[i].address,
        "class": cart[i].class,
    }];
  }

有人能给我一些线索或者只是给我一些关键词吗?

3 个答案:

答案 0 :(得分:4)

由于您必须将push个对象添加到数组中,因此此代码无效:

$rootScope.customMarkers = [];

for (var i = 0; i < cart.length; i++) {
    $rootScope.customMarkers.push({
        address: cart[i].address,
        "class": cart[i].class,
    });
  }

答案 1 :(得分:4)

您的当前代码在每次循环迭代时使用仅包含一个条目的新数组覆盖 $rootscope.customMarkers

这是map的经典用法:

$rootScope.customMarkers = cart.map(function(entry) {
    return {address: entry.address, class: entry.class};
});

...假设cart是一个数组。如果它不是,它只是像数组一样,你可以使用Array.from

$rootScope.customMarkers = Array.from(cart, function(entry) {
    return {address: entry.address, class: entry.class};
});

......或一个无聊的旧循环:

$rootScope.customMarkers = [];
for (var i = 0; i < cart.length; ++i) {
    $rootScope.customMarkers[i] = {address: cart[i].address, class: cart[i].class};
}

附注:从ES5开始,上述class的两种用途均有效,您不必在一个而不是另一个上加引号。如果您需要处理可能无法处理它的旧引擎,您需要在两个地方处理它:"class": entry["class"]

答案 2 :(得分:0)

你可以简单地使用foreach循环for angularjs

angular.forEach(cart, function(value, key) {
    $rootScope.customMarkers.push({
        address : value.address,
        class : value.class
    });
});

已经完成了。