Вот пример того, что вы ищете.Я вижу, вы добавили некоторые вещи, которые вы пробовали, обычно полезно объяснить, где, по вашему мнению, проблема и почему то, что вы пробовали, не работает.Обратите внимание, что в приведенном ниже примере я использую некоторые расширенные функции, которые могут поддерживаться не во всех браузерах, например Object.values()
.Кроме того, вы захотите найти лучшее регулярное выражение, соответствующее вашему URL, я бы не советовал это делать в любом типе производственного кода, но он работает для примера.Регулярные выражения URL распространены в Интернете и гораздо более надежны, чем эта.
const crms = [{
'0695dw9946': null,
fc0b0dw9437: 'example1.com',
adf03dw9241: null
},
{
'095ab5946': null,
f0b0b8643: 'example2.com',
af03bf024: null
}
];
const analytics = {
data: {
kind: 'analytics#gaData',
id: 'https://www.googleapis.com/analytics/v3/data/ga?ids=ga:&dimensions=ga:sourceMedium&metrics=ga:pageviews&start-date=30daysAgo&end-date=today',
query: {
'start-date': '30daysAgo',
'end-date': 'today',
ids: 'ga:',
dimensions: 'ga:sourceMedium',
metrics: [Array],
'start-index': 1,
'max-results': 1000
},
totalsForAllResults: {
'ga:pageviews': '7450'
},
rows: [
['example2.com / referral', '7350'], //pageviews from partner 2
['example1.com / referral', '100']
] //pageviews from partner 1
}
};
const poorUrlRegex = /([http|https]:\/\/)?.*/;
const results = crms.map(crm => {
const result = Object.assign({}, crm);
result.websitepageviews = -1
const vals = Object.values(crm).filter(v => !!v);
const url = vals.find(v => !!v.match(poorUrlRegex));
if (url) {
const matchingRow = analytics.data.rows.find(r => r[0].indexOf(url) > -1);
if (!!matchingRow) result.websitepageviews = parseInt(matchingRow[1], 10);
}
return result;
});
console.log(results);
Я назвал данные вашего примера и затем использовал Array.prototype.map
для добавления просмотров страниц.Это выполняет операцию с каждым элементом массива и возвращает измененный элемент.Object.assign
существует, чтобы не изменять существующие данные.Object.values
работает так же, как Object.keys
, но для значений.Я использую Array.prototype.find
, чтобы найти URL-подобные значения, а затем пытаюсь найти подходящую строку в ваших аналитических данных.
Это также делает много предположений, как это только найдет одна совпадающая строка в ваших аналитических данных, если URL-адрес появляется более одного раза, он не будет добавлять просмотры страниц, возвращая только первое вхождение.Также отсутствует какой-либо тип обработки ошибок, но он вернет -1
, если не найдет соответствующий URL в аналитике.