因此,我试图获取通过REST API收集的数据,并根据我已经创建的盐/胡椒进行解密。当$value
是对象数组时,以下函数仅返回数组中的最后一个对象。
encryption.decrypt()
返回一个字符串。
更新已更新了带有注释的代码,我仍然收到一个对象,而不是对象数组。
sharedServices.encryption.decrypt = function($value) {
if(typeof $value === 'object' && $value !== null) {
$result = {};
for(var $key in $value) {
$result[$key] = sharedServices.encryption.decrypt($value[$key]);
}
return $result;
} else if(Array.isArray($value)) {
$result = new Array();
for(var $i of $value) {
$result[$i] = sharedServices.encryption.decrypt($value[$i]);
}
return $result;
} else {
$pepperSalt = sharedServices.encryption.pepper + "3" + sharedServices.encryption.salt;
let encryption = new Encryption();
return encryption.decrypt($value, $pepperSalt);
}
};
答案 0 :(得分:0)
您首先检查对象的if statement
也与数组匹配(数组是一个对象以及所有对象)。我的意思是,您总是在对象和数组上都达到第一个IF。
因此您可以切换第一个和第二个if,或者正确检查其对象而不是第一个if statement
的数组
答案 1 :(得分:0)
设法使其最终运行。现在,只要找到字符串/整数,它就会遍历对象和数组,从而形成一个函数
sharedServices.functions.drill({
object:value,
params:{},
function: function(value, params) {return value;}
});
sharedServices.functions.drill = function(options) {
var result = null;
if(Object.prototype.toString.call(options.object) == '[object Array]') {
result = [];
angular.forEach(options.object,
function(value, key) {
console.log(key);
result.push(
sharedServices.functions.drill(
{
object: value,
params: options.params,
function: options.function
}
)
)
}
);
} else if(Object.prototype.toString.call(options.object) == '[object Object]') {
result = {};
for(var key in options.object) {
result[key] =
sharedServices.functions.drill(
{
object:options.object[key],
params: options.params,
function: options.function
}
);
}
} else {
result = options.function(options.object,options.params);
}
return result;
};