Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/23.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 检查obj是否存在并推送到阵列_Javascript_Angularjs_Arrays_Json - Fatal编程技术网

Javascript 检查obj是否存在并推送到阵列

Javascript 检查obj是否存在并推送到阵列,javascript,angularjs,arrays,json,Javascript,Angularjs,Arrays,Json,我想迭代一个JSON响应,检查键、值是否存在,如果不存在,将其添加到数组中 $scope.InitProdToArray = function (data) { angular.forEach($scope.data.obj.Product, function(value, index) { if (value.Product_type != 'T' ) { $scope.data.obj.Product.push({Product_type

我想迭代一个JSON响应,检查键、值是否存在,如果不存在,将其添加到数组中

  $scope.InitProdToArray = function (data) {
    angular.forEach($scope.data.obj.Product, function(value, index) {

        if (value.Product_type != 'T' ) {
            $scope.data.obj.Product.push({Product_type: 'T'});
        }
        if (value.Product_type != '16364NB' ) {
            $scope.data.obj.Product.push({Product_type: '16364NB'});
        }
        if (value.Product_type != '39087NB' ) {
            $scope.data.obj.Product.push({Product_type: '39087NB'});
        }
        if (value.Product_type != 'C' ) {
            $scope.data.obj.Product.push({Product_type: 'C'});
        }
        if (value.Product_type != '4NB' ) {
            $scope.data.obj.Product.push({Product_type: '4NB'});
        }        
    });

  JSON: $scope.data.obj.Product = 
                    [{
                        "Count": 28,
                        "Product_type": "T"
                    }, {
                        "Count": 88,
                        "Product_type": "4NB"
                    }, {
                        "Count": 20,
                        "Product_type": "C"
                    }, {
                        "Count": 3,
                        "Product_type": "39087NB"
                    }
                ]
这似乎不起作用,因为每次遍历每个节点时,我都在推键和值对。我最终得到了一个JSON,它有多个相同的产品类型


是否有方法阻止代码添加额外的键、值(如果已经存在)?

您似乎将类型检查写颠倒了。 而不是if value.Product_type!='T'{…我会想象像if value.Product_type=='T'{…这样,只有当类型匹配时,才推送到产品数组


除此之外,您还可以在推送之前检查产品数组是否已包含该类型的键:if$scope.data.obj.Product.indexOfvalue.Product_type!==未定义的

从代码中看,您似乎在执行搜索和插入,而不是使用键/值

如果您只支持新浏览器,则有一个名为find的便捷函数可用于此目的

var productTypes = ['T', '16364NB', '39087NB', 'C', '4NB'];

angular.forEach(productTypes, function(value) {
    var exists = $scope.data.obj.Product.find(function(item) {
        return (item.Product_type == value);
    });

    if (!exists) {
        $scope.data.obj.Product.push({
            Product_type: value,
            count: 0
        });
    }
});
如果需要支持较旧的浏览器,还需要添加for find。

变量类型={T:'T',NB4:'4NB',C:'C',NB39087:'39087NB'}; var乘积=[{Count:28,乘积_类型:T},{Count:88,乘积_类型:4NB}]; /*检查元素键是否不是指定的值*/ 函数为KeyInElementKeyToCheck,元素{ 返回元素。产品类型===keyToCheck; } /*检查数组中是否没有具有指定键的元素*/ 函数iskeyinaraykeytocheck,数组{ return!!array.filterfunction元素{return iskeyinerementkeytocheck,element;}.length; } /*另一种检查数组中是否没有具有指定键的元素的方法*/ 函数iskeyinaray2keytocheck,数组{ return array.mapfunction元素{return element.Product_type;}.indexOfkeyToCheck>-1; } 函数initProdToArraysource{ if!iskeyinaraytypes.T,source{source.push{Product_type:TYPES.T};} if!iskeyinaraytypes.NB4,source{source.push{Product_type:TYPES.NB4};} if!iskeyinaraytypes.C,source{source.push{Product_type:TYPES.C};} if!iskeyinaraytypes.NB39087,source{source.push{Product_type:TYPES.NB39087};} } initProdToArrayproducts;
console.logproducts;是的,您可以首先检查密钥是否存在于对象数组中。如何检查