我正在使用javascript,并尝试根据每个项目内的匹配项数量来复制数组项目。我相信我需要使用arr.map()完成此操作,但是在评估逻辑上遇到了麻烦。
因此,在下面的示例中,项目1将重复3次,项目2将重复1次。感谢您的帮助和时间。
我当前的数组如下:
"cards" = [
{
"text": "Item 1"
"matches": 3
}
{
"text": "Item 2"
"matches": 1
}
]
新数组看起来像:
"newCards" = [
{
"text": "Item 1"
"matches": 3
}
{
"text": "Item 1"
"matches": 3
},
{
"text": "Item 1"
"matches": 3
},
{
"text": "Item 2"
"matches": 1
},
{
"text": "Item 2"
"matches": 1
}
]
试图使用地图功能
let cardCounter = 0
let cardMap = cards.map(function (item){
cardCounter++
if (cardCounter < item.matches) {
// Not really sure what to return here....
// tried to return
// return[item, item]
// this returns an array where the first two keys are arrays and the rest undefined.
}
})
答案 0 :(得分:1)
我认为map
并不是一个好选择,因为它执行一个值到一个值的映射。如果有可用的破折号,则可以使用flatMap
,在这种情况下,您的return[item, item]
想法会起作用。如果不是,那么可以使用reduce
。像这样:
let cardMap = cards.reduce(function (acc, item){
for (let i = 0; i < item.matches; i++) {
acc.push(item);
}
return acc;
}, []);
答案 1 :(得分:0)
如何?
var cards = [
{
"text": "Item 1",
"matches": 3
},
{
"text": "Item 2",
"matches": 1
}
]
var newCardsArray = [];
cards.forEach(function(element) {
for(i = 0; i < element.matches; i++) {
newCardsArray.push(element);
}
});
console.log(newCardsArray);