如何使用jquery、json和自定义数据属性将map方法嵌套在map方法中
How do you nest a map method inside a map method using jquery, json and custom data attributes
我正在构建一个rails应用程序。我正在使用一个数据属性来获取json。
<% @image_urls.each_slice(5) do |row| %>
<% row.each do |_, urls| %>
<li class="square-image" data-urls=<%= urls.to_json %>>
<span class="user-image"><%= image_tag(urls.sample) %></span>
</li>
<% end %>
<% end %>
使用这个json,我试图通过循环json中的不同URL来每秒更新src属性。时机正在发挥作用。当我绘制第一张地图时,我成功地获取了URL。
然而,当我做嵌套映射时,我会得到错误"Uncaught TypeError:undefined不是一个函数。"现在我没有更新src部分,因为我只是试图在一个url中获取每个url。
我尝试过的东西:
- 将映射更改为each=不成功
播放$(url)和$(u)的语法。
var time = setInterval(function(){updateImage()}, 1000); var square_urls = ($($(".square-image")[0]).data("urls")); function updateImage(){ square_urls.map(function(urls){ urls.map(function(u){ console.log(u); }); }); }
如果我不做第二个映射,我就成功地获得了URL。
第二个映射给了我错误:"UnaughtTypeError:undefined不是函数。"
我重新调整了我的想法,首先专注于更新一个图像;我相信我试图同时做太多,需要进一步打破它。在updateImage函数中,我通过查找长度来更新一个正方形的图像,随机更新它,然后在数组中调用随机化的url。
在updateImage工作后,我集中精力更新所有的图像。在updateAllImages函数中,我可以使用updateImage函数,而不必嵌套,从而使代码变得混乱。注意,一开始我很困惑,因为我没有意识到jquery的每个方法都会调用索引和值(与Ruby不同),所以我必须确保为索引添加一个参数(在本例中为_)。
updateAllImages函数是通过每秒钟更新一次的时间函数调用的。
查看
<ul>
<% @image_urls.each_slice(5) do |row| %>
<% row.each do |_, urls| %>
<li class="square-image" data-urls=<%= urls.to_json %>>
<span class="user-image"><%= image_tag(urls.sample) %></span>
</li>
<% end %>
<% end %>
</ul>
JQuery
var squares = $(".square-image");
var time = setInterval(function(){updateAllImages(squares)}, 1000);
function updateAllImages(squares) {
$.each(squares, function(_, square) {
updateImage(square);
});
}
function updateImage(square) {
var urls = $(square).data("urls");
var urlCount = urls.length;
var randomIndex = Math.floor(Math.random() * urlCount);
var newUrl = urls[randomIndex];
// the image currently lives in a span so that's why I
// need to call children twice
var image = $(square).children().children()[0];
image.src = newUrl;
}
});
我想这就是你想要的:
var $squares = $(".square-image");
var urls = $squares.map(function(square) { return $(square).data("urls"); });
根据jQuery的文档:
返回的数组将被展平为结果数组。
因此,假设data-urls
中有一个数组,就不需要做更多的工作来从所有图像中生成所有URL。
请注意,jQuery的map函数旨在作为一个选择器。它不会有副作用。
// Use `each` when you want to *do* something instead of *select* something.
$.each(urls, function(url) { console.log(url); });
- 使用filter和map方法将数组中某些元素的第一个字母大写-JavaScript
- 在 Array.map() 中调用类方法
- 如何将回调函数添加到 .map 方法
- 下划线.js .map 方法会中断 IE8
- 使用map方法将javascript对象数组转换为其他对象数组
- 在 mongo map 中调用外部 javascript 函数(对象)或减少上下文的可能方法
- 使用类似于 Array.prototype.map() 的方法将数组转换为键值对象
- 获取对象 #
- 有没有更优雅的方法来实例化这个Map
- 'document.getElementsByClassName' 的结果没有定义像 'map' 这样的数组方法,即使它
- 无法在google map api v3中调用方法getPosition
- 如何使用jquery、json和自定义数据属性将map方法嵌套在map方法中
- 回调函数的定义以及它如何适用于array.prototype.forEach/map/filter方法
- 在map方法中获取数组键
- 饼状图显示未捕获类型错误:不能调用方法'map'的定义
- ES6中的map方法和lodash的区别是什么?
- 如何将原型上定义的方法作为回调传递给Array.map
- React element'的方法在绑定到map()函数中时表现出奇怪的行为
- 余烬-对象没有方法'map'
- 未定义的方法' map': id:象征