【问题标题】:How we can merge json object together我们如何将 json 对象合并在一起
【发布时间】:2016-11-08 14:34:54
【问题描述】:

我有我的第一个功能:

 $scope.loadDataFromToMonth= function (from,to,year) {
 // $scope.loadDataFromToMonthArrivee(from,to,2016);
  var url =   servername+'admin/dashboard/getIncidentDepartByMonthFromTo/'+from+'/'+to+'/'+year;
 // alert(url);

function onSuccess(response) {
    console.log("+++++getIncidentDepartByMonthFromTo SUCCESS++++++");
    if (response.data.success != false) {
        $scope.payloadgetIncidentDepartByMonthFromTo = response.data.data;
        var getIncidentDepartByMonthFromTo=  $scope.payloadgetIncidentDepartByMonthFromTo;
        console.log(JSON.stringify(getIncidentDepartByMonthFromTo));
        $scope.data = {}; // new object
        $scope.data.datasets = []; // new array in data object ..
        $scope.data.labels =[];
        var theWholeOb={};
        var dataSetObj = {}; //temp object to push into dataset array..
        var dataSetObjtwo = {};
        /////////////anomalies depart
        dataSetObj.data = [];
        dataSetObj.label= 'My First dataset';
        dataSetObj.fillColor='rgba(220,220,220,0.2)';
        dataSetObj.strokeColor= 'rgba(220,220,220,1)';
        dataSetObj.pointColor= 'rgba(220,220,220,1)';
        dataSetObj.pointStrokeColor= '#fff';
        dataSetObj.pointHighlightFill= '#fff';
        dataSetObj.pointHighlightStroke='rgba(220,220,220,1)';
        getIncidentDepartByMonthFromTo.forEach(function(data) {
            var monthNumber = $filter('date')(data.la_date, "MM");
            var mun = data.number;
            $scope.data.labels.push(monthNumber);                   
            dataSetObj.data.push(mun);
        });
        $scope.data.datasets.push(dataSetObj);          
    }
    else {
        alert("failure");
    }
};
function onError(response) {
    console.log("-------getIncidentDepartByMonthFromTo FAILED-------");
    //$scope.stopSpin('spinner-0');
    console.log(response.data);
    console.log("Inside getIncidentDepartByMonthFromTo error condition...");
  };
 //----MAKE AJAX REQUEST CALL to GET DATA----
    ajaxServicess.getData(url,username,password, 'GET', '').then(onSuccess,onError);
                                          };

这个函数返回这个结果:

$scope.data = {
labels: ['Jan', 'Feb' 'Jul'],
datasets: [
    {
        label: 'My First dataset',
        fillColor: 'rgba(220,220,220,0.2)',
        strokeColor: 'rgba(220,220,220,1)',
        pointColor: 'rgba(220,220,220,1)',
        pointStrokeColor: '#fff',
        pointHighlightFill: '#fff',
        pointHighlightStroke: 'rgba(220,220,220,1)',
        data: [75, 59, 80, 81, 56, 55]
    }
]
                 };

效果很好。

我有第二个函数,它返回相同的结果,但数据不同:

$scope.loadDataFromToMonthArrivee= function (from,to,year) {
var url =servername+'admin/dashboard/getIncidentArriveeByMonthFromTo/'+from+'/'+to+'/'+year;
//alert(url);
function onSuccess(response) {
    console.log("+++++getIncidentArriveeByDate SUCCESS++++++");

    if (response.data.success != false) {

        $scope.payloadDayMonthYearData = response.data.data;

        var loadedDataByDayMonthYear= $scope.payloadDayMonthYearData;
            alert('xxx'+JSON.stringify(loadedDataByDayMonthYear));
        $scope.data = {}; // new object
        $scope.data.datasets = []; // new array in data object ..
        $scope.data.labels =[];
        var theWholeOb={};
        var dataSetObj = {}; //temp object to push into dataset array..
        var dataSetObjtwo = {};
        /////////////anomalies arrivee
        dataSetObjtwo.data = [];
        $scope.date=[];
        dataSetObjtwo.label='My Second dataset';
        dataSetObjtwo.fillColor= 'rgba(151,187,205,0.2)';
        dataSetObjtwo.strokeColor= 'rgba(151,187,205,1)';
        dataSetObjtwo.pointColor= 'rgba(151,187,205,1)';
        dataSetObjtwo.pointStrokeColor= '#fff';
        dataSetObjtwo.pointHighlightFill='#fff';
        dataSetObjtwo.pointHighlightStroke= 'rgba(151,187,205,1)';
        loadedDataByDayMonthYear.forEach(function(data) {

            var monthNumber = $filter('date')(data.la_date, "MM");
            $scope.date.push(monthNumber);
            var mun = data.number;
            $scope.data.labels.push($scope.monthNumber);

            dataSetObjtwo.data.push(mun);
        });
        $scope.data.datasets.push(dataSetObjtwo);

    } else {
        alert("failure");
    }
    //  $scope.stopSpin('spinner-0');
};

function onError(response) {
    console.log("-------getIncidentArriveeByDate FAILED-------");
    //$scope.stopSpin('spinner-0');
    console.log(response.data);
    console.log("Inside getIncidentArriveeByDate error condition...");
};

//----MAKE AJAX REQUEST CALL to GET DATA----
ajaxServicess.getData(url,username,password, 'GET', '').then(onSuccess, onError);

                          };

这个函数返回这个结果:

$scope.data = {
labels: [ 'Jan', 'Feb' 'Jul','Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'],
datasets: [
    {
        label: 'My Second dataset',
        fillColor: 'rgba(151,187,205,0.2)',
        strokeColor: 'rgba(151,187,205,1)',
        pointColor: 'rgba(151,187,205,1)',
        pointStrokeColor: '#fff',
        pointHighlightFill: '#fff',
        pointHighlightStroke: 'rgba(151,187,205,1)',
        data: [ 102, 123, 145, 60, 161]
    }
]
                             };

它也很好用,但我的问题是:我如何在第一个函数中声明第二个函数并结合返回的数据并得到这样的最终结果:

$scope.data = {
labels: [ 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'],
datasets: [
    {
        label: 'My Second dataset',
        fillColor: 'rgba(151,187,205,0.2)',
        strokeColor: 'rgba(151,187,205,1)',
        pointColor: 'rgba(151,187,205,1)',
        pointStrokeColor: '#fff',
        pointHighlightFill: '#fff',
        pointHighlightStroke: 'rgba(151,187,205,1)',
        data: [ 102, 123, 145, 60, 161]
    },{
        label: 'My First dataset',
        fillColor: 'rgba(220,220,220,0.2)',
        strokeColor: 'rgba(220,220,220,1)',
        pointColor: 'rgba(220,220,220,1)',
        pointStrokeColor: '#fff',
        pointHighlightFill: '#fff',
        pointHighlightStroke: 'rgba(220,220,220,1)',
        data: [75, 59, 80, 81, 56, 55]
    }
]
                    };

【问题讨论】:

  • 这是你第三次问这个问题了。查看给出的答案并解释它们,并将它们结合到您的解决方案中
  • 我被卡住了,实际上我无法继续前进......没有人可以帮助
  • @imsiimsi 你搞定了吗?

标签: angularjs json ionic-framework


【解决方案1】:

只要你的对象只包含数组,你就可以按如下方式解决这个问题:

$scope.combineParts = function(part1, part2) {
    var merged = angular.copy( part1 );

    for ( key in part1 )
    {    
        if ( part2.hasOwnProperty(key) )
            merged[key].push.apply(merged[key], part2[key])
    }

    return merged;
}

这个小提琴中的演示:https://jsfiddle.net/gat4co9x/

希望这会有所帮助。 ;)

编辑:要集成只需调用第一个的 onSuccess 中的第二个函数,以及第二个的 onSuccess 中的 combineParts。

【讨论】:

    【解决方案2】:

    这对你来说更容易一些,首先调用$scope.loadDataFromToMonth(params);函数,在你准备好$scope.data之后,成功调用第二个函数$scope.loadDataFromToMonthArrivee(params);

    现在不要在$scope.loadDataFromToMonthArrivee(params); 中再次初始化$scope.data,只需这样做$scope.data.datasets.push(dataSetObjtwo);

    我在下面提供了类似的代码,所以只需尝试使用相同的代码,不要混淆,尝试任何新的东西,但坚持下去,在此工作之后,您可以将标签列表与两个对象分开。

    $scope.loadDataFromToMonth= function (from,to,year) {
     // $scope.loadDataFromToMonthArrivee(from,to,2016);
      var url =   servername+'admin/dashboard/getIncidentDepartByMonthFromTo/'+from+'/'+to+'/'+year;
     // alert(url);
    
    function onSuccess(response) {
        console.log("+++++getIncidentDepartByMonthFromTo SUCCESS++++++");
        if (response.data.success != false) {
            $scope.payloadgetIncidentDepartByMonthFromTo = response.data.data;
            var getIncidentDepartByMonthFromTo=  $scope.payloadgetIncidentDepartByMonthFromTo;
            console.log(JSON.stringify(getIncidentDepartByMonthFromTo));
            $scope.data = {}; // new object
            $scope.data.datasets = []; // new array in data object ..
            $scope.data.labels =[];
            var theWholeOb={};
            var dataSetObj = {}; //temp object to push into dataset array..
            var dataSetObjtwo = {};
            /////////////anomalies depart
            dataSetObj.data = [];
            dataSetObj.label= 'My First dataset';
            dataSetObj.fillColor='rgba(220,220,220,0.2)';
            dataSetObj.strokeColor= 'rgba(220,220,220,1)';
            dataSetObj.pointColor= 'rgba(220,220,220,1)';
            dataSetObj.pointStrokeColor= '#fff';
            dataSetObj.pointHighlightFill= '#fff';
            dataSetObj.pointHighlightStroke='rgba(220,220,220,1)';
            getIncidentDepartByMonthFromTo.forEach(function(data) {
                var monthNumber = $filter('date')(data.la_date, "MM");
                var mun = data.number;
                $scope.data.labels.push(monthNumber);                   
                dataSetObj.data.push(mun);
            });
            $scope.data.datasets.push(dataSetObj);    
            $scope.loadDataFromToMonthArrivee(params);//call the second list http call after you prepare first object ...      
        }
        else {
            alert("failure");
        }
    };
    function onError(response) {
        console.log("-------getIncidentDepartByMonthFromTo FAILED-------");
        //$scope.stopSpin('spinner-0');
        console.log(response.data);
        console.log("Inside getIncidentDepartByMonthFromTo error condition...");
      };
    
    $scope.loadDataFromToMonthArrivee= function (from,to,year) {
    var url =servername+'admin/dashboard/getIncidentArriveeByMonthFromTo/'+from+'/'+to+'/'+year;
    //alert(url);
    function onSuccess(response) {
        console.log("+++++getIncidentArriveeByDate SUCCESS++++++");
    
        if (response.data.success != false) {
    
            $scope.payloadDayMonthYearData = response.data.data;
    
            var loadedDataByDayMonthYear= $scope.payloadDayMonthYearData;
                alert('xxx'+JSON.stringify(loadedDataByDayMonthYear));
    
            var theWholeOb={};
            var dataSetObj = {}; //temp object to push into dataset array..
            var dataSetObjtwo = {};
            /////////////anomalies arrivee
            dataSetObjtwo.data = [];
            $scope.date=[];
            dataSetObjtwo.label='My Second dataset';
            dataSetObjtwo.fillColor= 'rgba(151,187,205,0.2)';
            dataSetObjtwo.strokeColor= 'rgba(151,187,205,1)';
            dataSetObjtwo.pointColor= 'rgba(151,187,205,1)';
            dataSetObjtwo.pointStrokeColor= '#fff';
            dataSetObjtwo.pointHighlightFill='#fff';
            dataSetObjtwo.pointHighlightStroke= 'rgba(151,187,205,1)';
            loadedDataByDayMonthYear.forEach(function(data) {
    
                var monthNumber = $filter('date')(data.la_date, "MM");
                $scope.date.push(monthNumber);
                var mun = data.number;
                $scope.data.labels.push($scope.monthNumber);
    
                dataSetObjtwo.data.push(mun);
            });
            $scope.data.datasets.push(dataSetObjtwo);
    
        } else {
            alert("failure");
        }
        //  $scope.stopSpin('spinner-0');
    };
    
    function onError(response) {
        console.log("-------getIncidentArriveeByDate FAILED-------");
        //$scope.stopSpin('spinner-0');
        console.log(response.data);
        console.log("Inside getIncidentArriveeByDate error condition...");
    };
    

    【讨论】:

    • 我们可以像昨天一样继续聊天吗
    • 你能提供链接吗?
    • 我做不到!
    猜你喜欢
    • 1970-01-01
    • 2021-01-17
    • 1970-01-01
    • 2018-06-04
    • 2015-12-27
    • 1970-01-01
    • 1970-01-01
    • 2019-12-02
    • 1970-01-01
    相关资源
    最近更新 更多