[英](AngularJS) Most efficient way to replace values in array globally
我想替换数组中的所有值,这是代码:
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/
你是对的。 无需转换为字符串再返回。 虽然涉及数组中的少量值,但就效率而言并没有多大关系。 但是,当您可以为数组本身提供如此强大的功能时,为什么还要转换为字符串并返回。
就像是:
$scope.Images = jsonImg.map(function(obj) {
obj.url = "cordova.url" + obj.url.substr(obj.url.lastIndexOf("/"))
return obj;
});
以我的理解,在所有图像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个选择:
// 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;
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' },
];
jsonImg.map(function(image) {
var split = image.url.split('/');
var fileName = split[split.length - 1];
image.url = 'cordova.url/' + fileName;
});
这将使您的jsonImg
数组中的所有字符串发生突变,将https://example.amazonaws.com/images-lib/
URL替换为cordova.url/
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.