Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/426.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript (AngularJS)全局替换数组中值的最有效方法_Javascript_Angularjs_Arrays_Json - Fatal编程技术网

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

Javascript (AngularJS)全局替换数组中值的最有效方法,javascript,angularjs,arrays,json,Javascript,Angularjs,Arrays,Json,我想替换数组中的所有值,代码如下: 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-Re

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

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的最有效方法吗?有没有其他的替代方法?请在这里检查小提琴:
你是对的。不需要转换为字符串并返回。虽然当涉及到数组中的少量值时,就效率而言并没有多大关系。但是,既然可以为数组本身提供如此强大的函数,为什么还要转换为字符串并返回呢

比如:

$scope.Images = jsonImg.map(function(obj) {
  obj.url = "cordova.url" + obj.url.substr(obj.url.lastIndexOf("/"))
  return obj;
});

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

样本

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

功能ImgCtrl($scope){
变量s3=”https://s3-ap-southeast-1.amazonaws.com/publixx-statics/images-lib/";
var cordava=“cordova.url/”;
变量URL=[{
“url:“1496846856视网膜01.jpg”
}, {
“url:“1496846856视网膜02.jpg”
}, {
“url:“1496846856视网膜03.jpg”
}]
$scope.path=Math.floor(Math.random()*100)%2==0?s3:cordava;
$scope.Images=URL;
console.log($scope.Images[0].url)
}

  • {{path}{{Image.url}

这将变异
jsonImg
数组中的所有字符串,替换
https://example.amazonaws.com/images-lib/
URL与
cordova.URL/

那么哪一种方法是有效的呢?使用map函数循环,或者只是将其设置为string,然后array@Mr_Perfect我还没有检查过jsperf之类的东西。但我总是建议尽可能使用数组函数而不是字符串转换。正如我在更新的答案中提到的,对于这么少的值来说,仅仅一个指针并不重要,
JSON.stringify
将从对象中删除任何函数。哇,谢谢,我想你可以回答我的下一个问题。在我的情况下,我有两种选择离线和在线阅读。假设我有$localStorage和“blogId”,对象是用“download”值存储的。如何切换这两个功能?一个有cdn path,另一个没有cdn path?在这种情况下,创建一个检查标志值的函数。基于此标志值,从localStorage读取它,或者使用硬编码的CDN url并返回此标记。理想情况下,这是一个配置参数,应该处理一次。您可以执行类似于
$scope.path=(function(){logic…})(
的操作,那么您认为哪一个更有效?函数(路径)之类的东西?或函数(在线或离线)是否在函数内部?
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;
});