javascript - 遍历一组项目并匹配每前 5 个索引,然后是下一个 4,然后是下一个 6,然后是全部增益,5, 4 6
问题描述
代码看起来类似,但如果项目超过 15 个,我不想添加更多 if 语句。我需要一个模式作为参数传递。
模式 = [5,4,6]?
function rearangeItems (items) {
items.forEach((element, index) => {
if (index < 5) {
element.classList.add('col-fifth');
} else if (index>=5 && index <=8) {
element.classList.add('col-fourth');
} else {
element.classList.add('col-sixth');
}
});
}
解决方案
您可以使其适用于任何模式。创建一个pattern
数组,该数组具有每个块的长度和与之关联的类
const pattern = [
[5, 'col-fifth'],
[4, 'col-fourth'],
[6, 'col-sixth']
]
然后创建一个生成器函数,该函数创建一个填充块长度时间的类数组。
function* getClass(pattern) {
const classes = pattern.flatMap(([n, cls]) => Array(n).fill(cls))
while (true)
yield* classes
}
classes
数组看起来:
['col-fifth', 'col-fifth', ...x5, 'col-fourth' x 4, 'col-sixth' x 6 times]
使用while(true)
andyield*
以该顺序返回一个类的次数与请求的次数一样多。
像这样调用里面的生成器函数rearangeItems
:
function rearangeItems(items, pattern) {
const gen = getClass(pattern);
items.forEach((element) =>
element.classList.add(gen.next().value)
);
}
这是一个片段:
document.querySelector("ul")
.innerHTML += Array.from({ length: 100 }, (_, i) => `<li>${i}</li>`).join("")
function rearangeItems(items, pattern) {
const gen = getClass(pattern);
items.forEach((element) =>
element.classList.add(gen.next().value)
);
}
function* getClass(pattern) {
const classes = pattern.flatMap(([n, cls]) => Array(n).fill(cls))
while (true)
yield* classes
}
const pattern = [ [5, 'col-fifth'], [4, 'col-fourth'], [6, 'col-sixth'] ]
rearangeItems(document.querySelectorAll("li"), pattern)
.col-fifth { color: red }
.col-fourth { color: green }
.col-sixth { color: yellow }
<ul></ul>
推荐阅读
- wordpress - 具有给定设计的 wp_posts 没有正确重复
- c# - 如何在 Telerik 的 RadCartesianChart 的工具提示中显示不受 CategoryPath 或 ValuePath 约束的值?
- string - 如何使用移位从 MIPS32 程序集中的 4 字节字符串中删除字符?
- scala - 如何为类型 Iterator[org.apache.spark.sql.Row] 创建编码器
- ios - 如何在发送时不显示推送消息的情况下运行该功能?
- mysql - 在这个表结构中,如何按字段值搜索文章?
- tensorflow - 从 Keras 模型的 predict() 方法返回实例 ID 和预测
- reactjs - React EdiText - 使用 Enter 键提交
- java - 通过 JNI 创建和设置数组
- c# - 为什么没有支持的机制可用于使用 Xamarin.iOS 在 C# 中创建可从 Objective-C 调用的库。?