在循环数组Javascript

时间:2016-03-15 14:50:22

标签: javascript arrays angularjs

我需要替换对象属性值中的字符。我循环遍历对象数组(输出到控制台)并检索FeatureUrl属性。

我以下列形式从Svc返回该属性的数据:

的index.html#/嗒嗒

我需要将'#'替换为'#/ app',以便我的新网址以下列形式返回:

的index.html#/应用/嗒嗒

我不确定.replace是否是正确使用的方法,但这是我所看到的建议。有人能指出我正确的方向吗?

var localFeatureDetails = function() {
    $scope.user = userService.GetUserInformation();
    $scope.featureDetails = $scope.user.Features;

  var featureUrlRewrite = function () {
    var index;
    var urlCount;
    for (index = 0; index < $scope.featureDetails.length; index++) {
      urlCount = $scope.featureDetails[index];
      urlCount.FeatureUrl.replace("#","#/app");
      console.log(urlCount);
    }
  };

  featureUrlRewrite();

};
localFeatureDetails();

2 个答案:

答案 0 :(得分:1)

我没有测试您的代码,但根据.replace()的工作原理,您必须通过覆盖它再次将值分配给您的对象属性,否则您不会保存该值。

假设其他一切都正确,请尝试以下方法: $scope.featureDetails[index].FeatureUrl = urlCount.FeatureUrl.replace("#","#/app");

参考:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/replace

答案 1 :(得分:1)

我认为你可能想要更像这样的东西

$scope.featureDetails.map(detail => angular.merge({}, detail, 
    { FeatureUrl: detail.replace('#', '#/app') }))

而不是庞大的for循环。

我们从detail数组中取出每个featureDetails对象,访问FeatureUrl属性并将#替换为#/app

.merge(destination, ...sources) 来源 合并到 目的地 ,左边 - 从右到右,覆盖属性。

所以angular.merge({}, {foo: 5, bar: 3}, {foo: 7})会返回{ foo: 7, bar: 3 }

删除console.log(),但您始终可以

console.log($scope.featureDetails);

然后查看检查器中返回的对象。