以编程方式修改数组| Java脚本

时间:2019-04-19 08:31:36

标签: javascript

因此,我试图获取通过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);
    }
};   

2 个答案:

答案 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;
        };