data.reduce((byKeyHere, current) => { Object.keys(requiredKeyMappings).forEach(key => { byKeyHere[key] = byKeyHere[key] || {} const keyHere = getByDot(current, key) if (keyHere) { if (Array.isArray(keyHere)) { if (!requiredKeyMappings[key].asArray) { mapDataWithId(byKeyHere, key, keyHere[0], current) } else { keyHere.forEach(hereKey => mapDataWithId(byKeyHere, key, hereKey, current)) } } else { mapDataWithId(byKeyHere, key, keyHere, current) } } }) return byKeyHere }, {})
Promise.all(requests) .then(responses => { responses.forEach((response, index) => { const include = includes[index] const relatedItems = response.data || response data.forEach(item => { const keyHere = getByDot(item, include.keyHere) if (keyHere) { if (Array.isArray(keyHere)) { if (!include.asArray) { setByDot(item, include.nameAs, getRelatedItems(keyHere[0], relatedItems, include)) } else { setByDot(item, include.nameAs, getRelatedItems(keyHere, relatedItems, include)) } } else { setByDot(item, include.nameAs, getRelatedItems(keyHere, relatedItems, include)) } } }) }) return Promise.resolve(context) })