Javascript 检查obj是否存在并推送到阵列
我想迭代一个JSON响应,检查键、值是否存在,如果不存在,将其添加到数组中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
$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;是的,您可以首先检查密钥是否存在于对象数组中。如何检查