The first loop expects object, the second loop expects string. So they both skip anything that isn't what they expect.

This is basically to allow:

```javascript
  map = {
    jquery: 'jquery@2.0.3',
    'jquery@2.0.3': {
      sizzle: 'sizzle@1.2'
    }
  }
```

In RequireJS, the first type of map was handled on a "*" property, which was incredibly off-putting.