Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/368.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 从JSON生成映射/数组_Javascript_Arrays_Json - Fatal编程技术网

Javascript 从JSON生成映射/数组

Javascript 从JSON生成映射/数组,javascript,arrays,json,Javascript,Arrays,Json,我有以下对象结构 { carMaker: { Id: '01', Name: 'Audi', Headquarter: 'Germany' }, modelName: 'R8', Id: '1', CarMaker: 'Audi', color: 'black' } 基本上,这是一个汽车清单,其中提到了其汽车制造

我有以下对象结构

    {
        carMaker: {
            Id: '01',
            Name: 'Audi',
            Headquarter: 'Germany'
        },
        modelName: 'R8',
        Id: '1',
        CarMaker: 'Audi',
        color: 'black'
    }
基本上,这是一个汽车清单,其中提到了其汽车制造商的名字。 汽车制造商的详细信息也嵌套在关键汽车制造商的内部

我想要的是填充一个JSON结构,其中包含汽车制造商的列表,其中汽车制造商创建的汽车位于关键carsList下的数组中

有谁能建议一种有效的方法来实现这一点,而不使用两个for循环,这将是一种简单的解决方法,并且会影响较大值的性能

    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
        <title></title>
        <script src="../content/vendor_js/AngularJS/angular.js"></script>
        <script>

            var testmodule = angular.module('testmodule', []);

            testmodule.controller('testcontroller', ['$scope', function         ($scope) {
                $scope.carList = [
                    {
                        carMaker: {
                            Id: '01',
                            Name: 'Audi',
                            Headquarter: 'Germany'
                        },
                        modelName: 'R8',
                        Id: '1',
                        CarMaker: 'Audi',
                        color: 'black'
                    }, {
                        carMaker: {
                            Id: '01',
                            Name: 'Audi',
                            Headquarter: 'Germany'
                        },
                        modelName: 'A7',
                        Id: '2',
                        CarMaker: 'Audi',
                        color: 'red'
                    }, {
                        carMaker: {
                            Id: '02',
                            Name: 'Nissan',
                            Headquarter: 'Japan'
                        },
                        modelName: 'GTR',
                        Id: '4',
                        CarMaker: 'Nissan',
                        color: 'yellow'
                    }, {
                        carMaker: {
                            Id: '03',
                            Name: 'Volkswagen',
                            Headquarter: 'Germany'
                        },
                        modelName: 'Polo',
                        Id: '5',
                        CarMaker: 'Volkswagen',
                        color: 'black'
                    }
                ];

                $scope.carMakerList = {};
                $scope.createJSONArray = function () {
                    angular.forEach($scope.carList, function (car) {
                        $scope.carMakerList[car.carMaker.Name] =         car.carMaker;
                    });

                    angular.forEach($scope.carMakerList, function (carMaker)         {
                        carMaker.cars = [];
                    });

                    angular.forEach($scope.carList, function (car) {
                        $scope.carMakerList[car.CarMaker]["cars"].push(car);
                    });
                };

                $scope.createJSONArray();

            }]);
        </script>
    </head>
    <body ng-app="testmodule" ng-controller="testcontroller">
        <table border="1">
            <tr ng-repeat="carmaker in carMakerList">
                <td><p ng-bind="carmaker.Id"></p></td>
                <td><p ng-bind="carmaker.Name"></p></td>
                <td>
                    <ul>
                        <li ng-repeat="cars in carmaker.cars">
                            <p ng-bind="cars.modelName"></p>
                        </li>
                    </ul>
                </td>
            </tr>
            <tr>
                <h3></h3>
            </tr>
        </table>
    </body>
    </html>

var testmodule=angular.module('testmodule',[]);
testmodule.controller('testcontroller',['$scope',函数($scope){
$scope.carList=[
{
汽车制造商:{
Id:'01',
名称:“奥迪”,
总部:德国
},
型号名称:“R8”,
Id:'1',
汽车制造商:“奥迪”,
颜色:“黑色”
}, {
汽车制造商:{
Id:'01',
名称:“奥迪”,
总部:德国
},
型号名称:“A7”,
Id:'2',
汽车制造商:“奥迪”,
颜色:“红色”
}, {
汽车制造商:{
Id:'02',
名称:'日产',
总部:日本
},
型号名称:“全球技术法规”,
Id:'4',
汽车制造商:“日产”,
颜色:“黄色”
}, {
汽车制造商:{
Id:'03',
名称:“大众”,
总部:德国
},
型号名称:“Polo”,
Id:'5',
汽车制造商:“大众”,
颜色:“黑色”
}
];
$scope.list={};
$scope.createJSONArray=函数(){
角度.forEach($scope.carList,函数(car){
$scope.automobillist[car.automobile.Name]=car.automobile;
});
angular.forEach($scope.automobilist,函数(汽车制造商){
汽车制造商.汽车=[];
});
角度.forEach($scope.carList,函数(car){
$scope.automobillist[car.automobile制造商][“cars”]。推送(car);
});
};
$scope.createJSONArray();
}]);


这是一个单循环提案,其中有一个对象作为
carsList的参考

var data=[{汽车制造商:{Id:'01',名称:'Audi',总部:'Germany'},车型名称:'R8',Id:'1',汽车制造商:'Audi',颜色:'black'},{汽车制造商:{Id:'01',名称:'Audi',总部:'Germany'},车型名称:'A7',Id:'2',汽车制造商:'Audi',颜色:'red'},{汽车制造商:{Id:'02',名称:'Nissan',总部:'Japan,车型名称:'GTR',Id:'4',汽车制造商:'Nissan',颜色:'yellow'},{汽车制造商:{Id:'03',名称:'Volkswagen',总部:'Germany'},车型名称:'Polo',Id:'5',汽车制造商:'Volkswagen',颜色:'black'},
分组=[];
data.forEach(函数(a){
var key=a.汽车制造商名称,o;
如果(!此[键]){
o={Id:a.automomer.Id,Name:a.automomer.Name,总部:a.automomer.总部,carsList:[]};
此[键]=o.carsList;
分组。推(o);
}
此[key].push({modelName:a.modelName,Id:a.Id,color:a.color});
},Object.create(null));

document.write(“”+JSON.stringify(分组,0,4)+“”)请添加所需的结构和您尝试的代码。您自己还没有尝试解决此问题。请仅使用一个属性创建有效的对象结构<代码>汽车制造商。很抱歉,没有提供确切的结构,我已用正确的代码更新了问题。很抱歉没有制作小提琴,因为我不知道如何将angular.js文件添加到小提琴中。现在我已经在上面的问题中写下了我的全部代码@Nina Scholz会影响较大值的性能事实上,这可能不会,也肯定不值得担心,直到您确定它是。感谢Nina,+1的实现,但是如果我有很多键,而不仅仅是有限的Id、名称,总部。但是现在这种方法很好,从你那里学到了一些东西:)对于许多关键点,你可以使用一个带有关键点的数组,并交互创建所有新属性。