如何跳过.map
中的数组元素?
我的代码:
var sources = images.map(function (img) {
if(img.src.split('.').pop() === "json"){ // if extension is .json
return null; // skip
}
else{
return img.src;
}
});
这将返回:
["img.png", null, "img.png"]
只需.filter()
首先:
var sources = images.filter(function(img) {
if (img.src.split('.').pop() === "json") {
return false; // skip
}
return true;
}).map(function(img) { return img.src; });
如果您不想这样做,这并不是不合理的,因为它有一些成本,您可以使用更通用的.reduce()
。通常可以用.reduce
表示.map()
:
someArray.map(function(element) {
return transform(element);
});
可以写成
someArray.reduce(function(result, element) {
result.push(transform(element));
return result;
}, []);
因此,如果需要跳过元素,可以使用.reduce()
:
var sources = images.reduce(function(result, img) {
if (img.src.split('.').pop() !== "json") {
result.push(img.src);
}
return result;
}, []);
在该版本中,第一个示例中的.filter()
中的代码是.reduce()
回调的一部分。只有在筛选操作会保留图像源的情况下,图像源才会被推送到结果数组上。
更新--这个问题得到了很多关注,我想补充以下澄清的话。作为一个概念,.map()
的目的是完成“map”的确切含义:根据某些规则将一个值列表转换为另一个值列表。就像一个国家的纸质地图如果完全缺少几个城市会看起来很奇怪一样,从一个列表到另一个列表的映射只有在结果值为1到1的情况下才真正有意义。
我并不是说从排除了一些值的旧列表创建新列表没有意义。我只是想说明.map()
有一个简单的意图,即创建一个与旧数组长度相同的新数组,只使用由旧值转换形成的值。
我一直在尝试将更多的函数式编程融入到我所做的事情中,因为我编写的代码具有无副作用的性质,并且在并发代码中具有实用性。我遇到了需要过滤掉java流的连续元素的情况,并且没有比简单的旧命令方法更好的函数方法了。假设我有一个记录参数的程序,我想过滤掉两个连续的元素。例如,。我在日志中想要的是。 我提出了几种方法,但没有一种方法比使用for循环更容易理解,该循环索引了我需要过滤掉的内容。 这似乎是一件很平
但是..我可以跳过HTML,直接访问输入元素吗…好像?
问题内容: 我有一个复杂的html结构,其中包含许多表和div ..而且结构可能会更改。如何通过跳过两者之间的元素来查找xpath。例如 : 我必须获取有关“名字”范围的输入元素 例如: 但是..我可以跳过htmls之间的内容并直接访问输入元素吗? 问题答案: 您可以尝试以下Xpath: 说明: 选择元素: 然后在上方元素旁边获取元素: 然后在上面第二步中选择的元素内获取元素:
问题内容: 由于mapper函数在每一行上运行,我可以知道如何跳过第一行。对于某些文件,它包含我想忽略的列标题 问题答案: 在读取文件的映射器中,数据作为键值对读取。关键是下一行开始处的字节偏移量。对于第1行,它始终为零。所以在mapper函数中执行以下操作
我想过滤map列表的元素,然后在Java8+中返回map 在getEmployeeByDepartment方法中,对于映射中的每个条目,使用下面的filterEmployee方法在映射值的列表中筛选employee,返回的map1将包含映射,以便 <“tech”,list2.add(emp6)>//emp6的filterEmployee返回true 我在下面试过这个和那个,但没有成功
如何过滤<代码>地图 仅当列表中的任何员工具有字段值性别=“M”时,我才必须过滤。 输入: