【问题标题】:Changing values of each object in Javascript在 Javascript 中更改每个对象的值
【发布时间】:2012-05-17 10:53:56
【问题描述】:

向每个 javascript 对象添加附加路径信息的最佳方法是什么?就像每个 jpg 名称之前的“assets/img/upload/”?我有 url="assets/img/upload/02.jpg" 等?那将是很大的帮助!

我现在的数据:

[Object { url="02.jpg"}, 
 Object { url="03.jpg"}, 
 Object { url="09.jpg"}, 
 Object { url="04.jpg"}, 
 Object { url="5.jpg"}
 ...]

【问题讨论】:

  • 您是如何获得这些数据的?因为您可以简单地在 url 当前值之前添加 url 字符串
  • 这不是合法的 javascript 数据结构。这是哪里来的?
  • 感谢您的询问...它来自数据库表,我无法更改...

标签: javascript


【解决方案1】:

一个简单的for循环:

for(var i = 0; i < array.length; i++)
{
  array[i].url = "assets/img/upload/" + array[i].url;
}

【讨论】:

  • 花括号的位置:应该和for语句在同一行,避免自动插入分号。绝对是必须的。
  • @frenchie,没有。上述代码(或任何类似的循环代码)中没有自动插入分号。
  • @frenchie,我对自动分号插入很熟悉,它不会像上面那样影响语法。 Working demo。如果您发现任何版本的浏览器在该代码中插入了分号,请告诉我。
  • @frenchie,文档清楚地表明 JSlint “着眼于一些样式约定以及结构问题”。这是一个风格偏好问题。这里的相关选项是“容忍混乱的空白”。但是,我不同意这个空白是混乱的。文档没有提到此选项与分号插入之间的联系,并且此代码也没有。
【解决方案2】:

假设您的对象数组称为 MyArray:

for (var i = 0, LoopTimes = MyArray.length; i < LoopTimes; i++) {
       MyArray[i].url = "assets/img/upload/" + MyArray[i].url;
}

注意:

a) 左大括号与for 语句位于同一行。有关解释,请参阅 youtube 上 Javascript The Good Parts 上的 Crokfod。在 javascript 中,将左大括号放在下一行会产生一些难以检测的奇怪错误。

b) 我将 MyArray 的长度缓存在 LoopTimes 中,这样我就不必在每次迭代时评估数组的长度。

【讨论】:

  • 您是否对缓存长度的影响进行了基准测试?现代 JavaScript VM 越来越优化,因此它可以被 VM 缓存或内联。即使没有,也并不意味着影响很大。
  • 未进行基准测试,但可以肯定至少与不缓存它一样快并且可能更快,并且肯定不会更慢。你可能想用谷歌搜索这个主题;缓存数组长度被认为是最佳实践。
  • 我在上面找到了question。它似乎在某些浏览器中自动优化,但在其他浏览器中没有。
【解决方案3】:

如果您只打算在现代浏览器中运行此代码,您始终可以考虑使用Array 对象的map 方法。

假设您的对象数组称为“数组”

array.map(function(item) {return item.url = "assets/img/upload/" + item.url;});

这会运行匿名函数,该函数接受数组中的“项目”,并在数组的每个元素上返回修改后的 url 字段。

如果您需要您的代码在旧版浏览器上运行,请坚持使用其他贡献者建议的 for 循环。

【讨论】:

  • 我认为这令人困惑。 map 的重点是返回一个新数组(您将丢弃它)。你真的不应该就地修改它。这就是array.forEach 的用途。
  • map 被允许操作数组内容,但是由于不需要创建和返回新数组,所以foreach 可能更合适。
猜你喜欢
  • 2021-07-17
  • 2020-08-11
  • 2020-11-11
  • 1970-01-01
  • 2019-05-13
  • 2017-07-24
  • 2021-04-24
  • 1970-01-01
  • 2021-07-13
相关资源
最近更新 更多