Javascript 我使用IE的Angle factory/service中有两个错误,但Chrome或Edge中没有错误

Javascript 我使用IE的Angle factory/service中有两个错误,但Chrome或Edge中没有错误,javascript,angularjs,google-chrome,internet-explorer,angular-services,Javascript,Angularjs,Google Chrome,Internet Explorer,Angular Services,我在IE中遇到了两个错误,而在Chrome或Edge中没有遇到。 var groupedArray = Object.keys(groupedObj).sort() .map(key=>groupedObj[key]); 可能是与特定代码和IE的兼容性问题,也可能是我的代码本身导致了错误 第一个错误: var groupedArray = Object.keys(groupedObj).sort() .map(key=>groupedObj[key]); 语法错误

我在IE中遇到了两个错误,而在Chrome或Edge中没有遇到。

var groupedArray = Object.keys(groupedObj).sort()
    .map(key=>groupedObj[key]);
可能是与特定代码和IE的兼容性问题,也可能是我的代码本身导致了错误

第一个错误:

var groupedArray = Object.keys(groupedObj).sort()
    .map(key=>groupedObj[key]);
语法错误(无详细说明):在这行代码上:

var groupedArray = Object.keys(groupedObj).sort().map(key=>groupedObj[key]); 
第二个错误:

var groupedArray = Object.keys(groupedObj).sort()
    .map(key=>groupedObj[key]);

错误:[$injector:unpr]未知提供程序:GroupDateRangeServiceProvider这是感谢zeroflagL的解决方案:

(function () {
    'use strict';

    angular
        .module('portalDashboardApp')
        .factory('GroupDateRangeService', GroupDateRangeService);

    GroupDateRangeService.$inject = [];

    function GroupDateRangeService() {

        var service = {
            createArray: createArray,
            setItemCount: setItemCount,
            setSeries: setSeries
        };

        return service;

        function createArray(dateArray, valueArray) {
            var arr = dateArray.map(function (s) {
                var week = getWeekNumber(parseISOLocal(s));
                return week[0] + ('0' + week[1]).slice(-2) + ':' + s;
            }).sort();
            var results = createGroupedArray(createGroupObject(arr));
            if (valueArray && valueArray.length === dateArray.length) {
                for (var i = 0; i < results.length; i++) {
                    results[i] = results[i].map(function (date, index) {
                        var obj = {};
                        obj[date] = valueArray[index];

                        return obj;
                    });
                }
            }

            var arrayOfWeeks = results;
            return results;
        }

        // Create a Total Count
        function setItemCount(dataSet) {
            var itemCount = 0;
            angular.forEach(dataSet, function (dataItem) {
                itemCount = itemCount + dataItem.Total;
            });
            return itemCount;
        };

        // Create Chart Series
        function setSeries(dataSet, type) {
            var series = [{
                name: 'Items',
                data: [],
                showInLegend: false
            }];
            angular.forEach(dataSet, function (dataItem, dataIndex) {
                if (type === 'Count') {
                    series[0].data[dataIndex] = [dataItem.Description, dataItem.Total];
                }
                else if (type === 'Percentage') {
                    series[0].type = 'pie';
                    series[0].innerSize = '40%';
                    series[0].data[dataIndex] = [dataItem.Description, dataItem.Percentage];
                }
                else if (type === 'Adspend') {
                    series[0].data[dataIndex] = [dataItem.Description, dataItem.Adspend];
                }
            });
            return series;
        };

        function createGroupObject(arr) {

            var groupedObj = arr.reduce(function (result, value) {

                var b = value.split(':');

                if (!result[b[0]]) result[b[0]] = [];
                result[b[0]].push(b[1]);

                return result;

            }, {});

            return groupedObj;
        }

        function createGroupedArray(groupedObj) {

            // Grab arrays in order of week number. Sort keys to maintain order
            var groupedArray = Object.keys(groupedObj).sort().map(key=>groupedObj[key]);

            // Final set of grouped dates
            console.log(groupedArray.join('\n\n'));

            return groupedArray;

        }

        /* Helper to get the ISO week number of a date
        ** @param {Date} date to get week of
        ** @returns {Array} [year, weekNumber]
        */
        function getWeekNumber(d) {
            d = new Date(+d);
            d.setHours(0, 0, 0, 0);
            d.setDate(d.getDate() + 4 - (d.getDay() || 7));
            var yearStart = new Date(d.getFullYear(), 0, 1);
            var weekNo = Math.ceil((((d - yearStart) / 86400000) + 1) / 7);
            return [d.getFullYear(), weekNo];
        }

        /* Parse ISO 8601 format date string to local date
        ** @param {string} s - string to parse like 2016-12-15
        ** @returns {Date}
        */
        function parseISOLocal(s) {
            var b = s.split(/\D/);
            return new Date(b[0], b[1] - 1, b[2]);
        }
    }

})();
var groupedArray = Object.keys(groupedObj).sort()
    .map(function (key) {
        return groupedObj[key];
    });
我的问题是在我的服务/工厂中使用ES2015 JavaScript代码。这是无法与IE相比的,IE已经两年没有新版本了

所以,改变

var groupedArray = Object.keys(groupedObj).sort()
    .map(key=>groupedObj[key]);
至:

(function () {
    'use strict';

    angular
        .module('portalDashboardApp')
        .factory('GroupDateRangeService', GroupDateRangeService);

    GroupDateRangeService.$inject = [];

    function GroupDateRangeService() {

        var service = {
            createArray: createArray,
            setItemCount: setItemCount,
            setSeries: setSeries
        };

        return service;

        function createArray(dateArray, valueArray) {
            var arr = dateArray.map(function (s) {
                var week = getWeekNumber(parseISOLocal(s));
                return week[0] + ('0' + week[1]).slice(-2) + ':' + s;
            }).sort();
            var results = createGroupedArray(createGroupObject(arr));
            if (valueArray && valueArray.length === dateArray.length) {
                for (var i = 0; i < results.length; i++) {
                    results[i] = results[i].map(function (date, index) {
                        var obj = {};
                        obj[date] = valueArray[index];

                        return obj;
                    });
                }
            }

            var arrayOfWeeks = results;
            return results;
        }

        // Create a Total Count
        function setItemCount(dataSet) {
            var itemCount = 0;
            angular.forEach(dataSet, function (dataItem) {
                itemCount = itemCount + dataItem.Total;
            });
            return itemCount;
        };

        // Create Chart Series
        function setSeries(dataSet, type) {
            var series = [{
                name: 'Items',
                data: [],
                showInLegend: false
            }];
            angular.forEach(dataSet, function (dataItem, dataIndex) {
                if (type === 'Count') {
                    series[0].data[dataIndex] = [dataItem.Description, dataItem.Total];
                }
                else if (type === 'Percentage') {
                    series[0].type = 'pie';
                    series[0].innerSize = '40%';
                    series[0].data[dataIndex] = [dataItem.Description, dataItem.Percentage];
                }
                else if (type === 'Adspend') {
                    series[0].data[dataIndex] = [dataItem.Description, dataItem.Adspend];
                }
            });
            return series;
        };

        function createGroupObject(arr) {

            var groupedObj = arr.reduce(function (result, value) {

                var b = value.split(':');

                if (!result[b[0]]) result[b[0]] = [];
                result[b[0]].push(b[1]);

                return result;

            }, {});

            return groupedObj;
        }

        function createGroupedArray(groupedObj) {

            // Grab arrays in order of week number. Sort keys to maintain order
            var groupedArray = Object.keys(groupedObj).sort().map(key=>groupedObj[key]);

            // Final set of grouped dates
            console.log(groupedArray.join('\n\n'));

            return groupedArray;

        }

        /* Helper to get the ISO week number of a date
        ** @param {Date} date to get week of
        ** @returns {Array} [year, weekNumber]
        */
        function getWeekNumber(d) {
            d = new Date(+d);
            d.setHours(0, 0, 0, 0);
            d.setDate(d.getDate() + 4 - (d.getDay() || 7));
            var yearStart = new Date(d.getFullYear(), 0, 1);
            var weekNo = Math.ceil((((d - yearStart) / 86400000) + 1) / 7);
            return [d.getFullYear(), weekNo];
        }

        /* Parse ISO 8601 format date string to local date
        ** @param {string} s - string to parse like 2016-12-15
        ** @returns {Date}
        */
        function parseISOLocal(s) {
            var b = s.split(/\D/);
            return new Date(b[0], b[1] - 1, b[2]);
        }
    }

})();
var groupedArray = Object.keys(groupedObj).sort()
    .map(function (key) {
        return groupedObj[key];
    });

解决了我的两个错误

我不明白。你写下你希望你的代码与IE兼容,但你故意使用在IE之后很久才引入的技术。你如何解释这一矛盾?嗨,zeroflagL,你指的是角度的使用,还是一行特定的代码?我的整个项目都是在IE中进行的,今天我在一个新的方法和服务中发现了这两个错误。这就是为什么我在寻求如何解决这个问题的方向。我希望这能澄清这一点。您使用ES2015(
key=>groupedObj[key]
),它是在IE的最后一个版本推出两年后推出的,更不用说旧版本了。感谢您的澄清。我确实认为这就是问题所在。您是否有建议在可接受的JavaScript版本中重写该行?那将是赢家D
function(key){returngroupedobj[key];}