0

I am trying to insert the statement If else with a for condition into a variable. I don't really know how to handle it.

Here is my original function:

var fontsList = '<div class="list">' + Object.keys(families).map(function(familyName) {
    chaine = families[familyName].map(function(variants) {
        return '<div class="all-sub-fonts" style="font-family:'+ variants.postscriptName +';" onclick=\'fontUsed("' + variants.postscriptName + '", this)\'><div class="variants-font">' + familyName + ' ' + variants.style + '</div></div>'
    })
    return '<div class="font-box-name" style="font-family:'+ familyName +';" onclick=\'fontUsed("' + familyName + '", this)\'>' + familyName + '</div><div class="btn-accordion"></div><div class="box-sub-fonts">'+ chaine.join('') +'</div>';
}).join('') + '</div>';

I'd like the chain to return when there are more than 1 variant in the font family. What I tried goes directly with else. Here is the code:

var fontsList = '<div class="list">' + Object.keys(families).map(function(familyName) {
        if(families.length > 1){
        chaine = families[familyName].map(function(variants) {
            return '<div class="all-sub-fonts" style="font-family:'+ variants.postscriptName +';" onclick=\'fontUsed("' + variants.postscriptName + '", this)\'><div class="variants-font">' + familyName + ' ' + variants.style + '</div></div>'
        })
        return '<div class="font-box-name" style="font-family:'+ familyName +';" onclick=\'fontUsed("' + familyName + '", this)\'>' + familyName + '</div><div class="btn-accordion"></div><div class="box-sub-fonts">'+ chaine.join('') +'</div>';
    } else {
        return '<div class="font-box-name" style="font-family:'+ familyName +';" onclick=\'fontUsed("' + familyName + '", this)\'>' + familyName + '</div>';
    } 
}).join('') + '</div>';

This code access to the font family having 1 variant only.

for(var k in families) if(families[k].length === 1)
Léo Durand
  • 215
  • 1
  • 4
  • 13
  • If `families` is an `Object` and you're iterating over its properties using `Object.keys`, what's the point of `var k in families` inside the `map` function? – haim770 May 25 '17 at 15:18
  • @haim770 Sorry I paste the wrong code, I updated it – Léo Durand May 25 '17 at 15:27
  • `families` (being an `Object`, not an `Array`), doesn't have a `length` property. Perhaps you meant `Object.keys(families).length`? – haim770 May 25 '17 at 15:28
  • @haim770 Yes exactly, in fact it does know react when change `.length > 1` to `.length < 1` but not individually. – Léo Durand May 25 '17 at 15:31
  • @haim770 I found it with your help, thanks ! `if(Object.keys(families[familyName]).length > 1){` – Léo Durand May 25 '17 at 15:41

0 Answers0