JavaScript - 将数组中的每 3 个项目包装到 div
JavaScript - Wrap every 3 items from an array to a div
我有一个包含 50 个项目的数组。
我想将每 3 个项目包装成一个 <div>
。
我绞尽脑汁想实现这个目标,但我无法让它工作
var cards = [];
for(var i=0; i < 50; i++){
cards.push('<div class="card-item">Test</div>');
}
for(var i = 0; i < cards.length; i++){
if(i % 3 === 0){
let slides = populateSlide(cards[i]);
console.log(slides);
}
}
populateSlide = (cards) => {
return `<div class="carousel-item item">${cards}</div>`;
}
使用上面的代码,我只能在每次乘以 3 时得到一个项目。因此我的 div
只有一个项目而不是三个。
提前致谢。
我会建议使用 .slice
然后 .wrapAll
这里有一个例子:
var divs = $("div > div");
for(var i = 0; i < cards.length; i+=3) {
divs.slice(i, i+3).wrapAll("<div class='new'></div>");
}
使用CSS,然后直接将所有子项插入父项div。无需在 JS 中做任何事情。
<div class="row" id="parent">
<div class="col-sm-4" style="background-color:lavender;">AAA</div>
<div class="col-sm-4" style="background-color:lavenderblush;">BBB</div>
<div class="col-sm-4" style="background-color:lavender;">CCC</div>
<div class="col-sm-4" style="background-color:lavender;">DDD</div>
<div class="col-sm-4" style="background-color:lavenderblush;">EEE</div>
<div class="col-sm-4" style="background-color:lavender;">FFF</div>
<div class="col-sm-4" style="background-color:lavender;">AAA</div>
<div class="col-sm-4" style="background-color:lavenderblush;">BBB</div>
<div class="col-sm-4" style="background-color:lavender;">CCC</div>
<div class="col-sm-4" style="background-color:lavender;">DDD</div>
<div class="col-sm-4" style="background-color:lavenderblush;">EEE</div>
<div class="col-sm-4" style="background-color:lavender;">FFF</div>
</div>
cards.map(item => Document.getElementById('parent').appendChild(item));
您可以将卡片存储在临时数组中并检查其长度。类似于:
{
const populateSlide = cards => {
console.log(cards)
}
const cards = [1, 2, 3, 4, 5, 6, 7, 8, 9];
let cardsTriple = []; // the temporary array
cards.forEach( card => {
cardsTriple.push(card); // add card to temp array
if(cardsTriple.length === 3){
let slides = populateSlide(cardsTriple);
cardsTriple = []; // reset the temp array
}
});
// there may still be cards available
if (cardsTriple.length) {
populateSlide(cardsTriple);
}
}
.as-console-wrapper { top: 0; max-height: 100% !important; }
这是将项目分块为 3 组的解决方案:
function chunks(array, n) {
return Array(Math.ceil(array.length/n)).fill().map((_,i) => array.slice(i*n,i*n+n));
}
var cards = []
for(var i=0; i < 50; i++){
cards.push('<div class="card-item">Test</div>');
}
var cardChunks = chunks(cards, 3)
var slider = cardChunks.map(cards => {
return `<div class="carousel-item item">${cards.join('')}</div>`
}).join('')
对于分块,我使用了以下解决方案:
但您可以在 lodash 等流行的库中找到它。
我有一个包含 50 个项目的数组。
我想将每 3 个项目包装成一个 <div>
。
我绞尽脑汁想实现这个目标,但我无法让它工作
var cards = [];
for(var i=0; i < 50; i++){
cards.push('<div class="card-item">Test</div>');
}
for(var i = 0; i < cards.length; i++){
if(i % 3 === 0){
let slides = populateSlide(cards[i]);
console.log(slides);
}
}
populateSlide = (cards) => {
return `<div class="carousel-item item">${cards}</div>`;
}
使用上面的代码,我只能在每次乘以 3 时得到一个项目。因此我的 div
只有一个项目而不是三个。
提前致谢。
我会建议使用 .slice
然后 .wrapAll
这里有一个例子:
var divs = $("div > div");
for(var i = 0; i < cards.length; i+=3) {
divs.slice(i, i+3).wrapAll("<div class='new'></div>");
}
使用CSS,然后直接将所有子项插入父项div。无需在 JS 中做任何事情。
<div class="row" id="parent">
<div class="col-sm-4" style="background-color:lavender;">AAA</div>
<div class="col-sm-4" style="background-color:lavenderblush;">BBB</div>
<div class="col-sm-4" style="background-color:lavender;">CCC</div>
<div class="col-sm-4" style="background-color:lavender;">DDD</div>
<div class="col-sm-4" style="background-color:lavenderblush;">EEE</div>
<div class="col-sm-4" style="background-color:lavender;">FFF</div>
<div class="col-sm-4" style="background-color:lavender;">AAA</div>
<div class="col-sm-4" style="background-color:lavenderblush;">BBB</div>
<div class="col-sm-4" style="background-color:lavender;">CCC</div>
<div class="col-sm-4" style="background-color:lavender;">DDD</div>
<div class="col-sm-4" style="background-color:lavenderblush;">EEE</div>
<div class="col-sm-4" style="background-color:lavender;">FFF</div>
</div>
cards.map(item => Document.getElementById('parent').appendChild(item));
您可以将卡片存储在临时数组中并检查其长度。类似于:
{
const populateSlide = cards => {
console.log(cards)
}
const cards = [1, 2, 3, 4, 5, 6, 7, 8, 9];
let cardsTriple = []; // the temporary array
cards.forEach( card => {
cardsTriple.push(card); // add card to temp array
if(cardsTriple.length === 3){
let slides = populateSlide(cardsTriple);
cardsTriple = []; // reset the temp array
}
});
// there may still be cards available
if (cardsTriple.length) {
populateSlide(cardsTriple);
}
}
.as-console-wrapper { top: 0; max-height: 100% !important; }
这是将项目分块为 3 组的解决方案:
function chunks(array, n) {
return Array(Math.ceil(array.length/n)).fill().map((_,i) => array.slice(i*n,i*n+n));
}
var cards = []
for(var i=0; i < 50; i++){
cards.push('<div class="card-item">Test</div>');
}
var cardChunks = chunks(cards, 3)
var slider = cardChunks.map(cards => {
return `<div class="carousel-item item">${cards.join('')}</div>`
}).join('')
对于分块,我使用了以下解决方案: 但您可以在 lodash 等流行的库中找到它。