(AngularJS) 全局替换数组中值的最有效方法

德登崛起

我想替换数组中的所有值,代码如下:

var jsonImg = [
{"url":"https://example.amazonaws.com/images-lib/1496846856-Retina 01.jpg"},
{"url":"https://example.amazonaws.com/images-lib/1496846856-Retina 02.jpg"},
{"url":"https://example.amazonaws.com/images-lib/1496846856-Retina 03.jpg"}
];

var imgUrl = JSON.stringify(jsonImg);
var oldString = imgUrl;
var newString = oldString.replace(/https:\/\/example.amazonaws.com\/images-lib\//g,"cordova.url/");

$scope.Images = JSON.parse(newString);

但是我认为 JSON.Stringfly 和 JSON.Parse 在这里有点多余,您认为这是替换所有值 JSON.Stringfly 和 JSON.Parse 的最有效方法吗?有没有其他替代方法可以做到这一点?请在这里检查小提琴:https : //jsfiddle.net/dedenbangkit/zu7utr6a/3/

拉杰什

根据我的理解,在所有图像 url 中重复 cdn 路径是多余的。您应该创建另一个变量来保存此路径,当您需要使用它时,只需连接两个字符串。这样,您可以轻松更改cdn路径,而无需处理。

样本

出于演示目的,我使用了Math.random,但您可以输入您的条件。

function ImgCtrl($scope) {
  var s3 = "https://s3-ap-southeast-1.amazonaws.com/publixx-statics/images-lib/";
  var cordava = "cordova.url/";
  var urls = [{
    "url": "1496846856-Retina 01.jpg"
  }, {
    "url": "1496846856-Retina 02.jpg"
  }, {
    "url": "1496846856-Retina 03.jpg"
  }]

  $scope.path = Math.floor(Math.random() * 100) % 2 === 0 ? s3 : cordava;
  $scope.Images = urls;
  console.log($scope.Images[0].url)
}
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.22/angular.min.js"></script>
<div ng-app>
  <div ng-controller="ImgCtrl">
    <ul>
      <li ng-repeat="Image in Images">
        {{path}}{{Image.url}}
      </li>
    </ul>
  </div>
</div>


根据我们的讨论,您可以有 2 个选择:

  • 当您的标志更具动态性并且会非常频繁地更改时,示例 1 更有用。
  • 如果您的标志在 1 个周期中只有 1 个值,则示例 2 更有用。类似于 A/B 测试。由于它在一个周期内始终保持不变,因此再次计算没有意义。只需保存一个处理过的值。这也会将 url 封装在范围内,并且在外部不可用,因此增加了安全性。
// Sample 1
var flag = Math.floor(Math.random() * 100) % 2 === 0;

function getImagePath(image) {
  var s3 = "https://s3-ap-southeast-1.amazonaws.com/publixx-statics/images-lib/";
  var cordava = "cordova.url/";
  return (flag ? s3 : cordava) + image;
}

// Usage:

var url = getImagePath(imageUrl)

// Sample 2
var path = (function() {
  var s3 = "https://s3-ap-southeast-1.amazonaws.com/publixx-statics/images-lib/";
  var cordava = "cordova.url/";
  return flag ? s3 : cordava;
})()

var url = path + imageUrl;

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章