在NodeJS中作为JS函数的Param传递时,Javascript对象不会发生变异

时间:2017-06-04 20:19:21

标签: javascript node.js

这里有一个问题,它意味着遍历一个数组并检查该数组中的项是否是提供给函数的对象中的键,并在最后一次迭代时返回提供的对象及其更新。 它旨在删除受保护数组中的任何项目。

此函数的预期行为是返回省略受保护项目的对象,但我得到的对象未被触及。

我已尝试在if语句中登录到控制台,以查看是否在对象中找到了每个项目,并且它们是。

此外,我在一个承诺中调用此函数并使用该值解析,我在Nodejs项目中写这个。

请帮助,谢谢!

Bar = function(){

    var self = this;

    self.data = null;
    self.show = [];
    self.guarded = [];
    self.appended = [];

    /**
     * Transforms and returns the response data
     * @param object Object/Array
     * @return Object/Array
    */
    self.make = function(data)
    {
        self.data = data;
        // validate props
        _validateProps();

        return self.get();
    }

    /**
     * Gets response
     * @return Promise
    */
    self.get = () => {
        return new Promise(function(resolve, reject)
        {
            if(_.isArray(self.data))
            {
                for(var i = 0; i < self.data.length; i++)
                {
                    // 
                    self.data[i] = self._append(self.data[i]);
                    self.data[i] = self._show(self.data[i]);
                    self.data[i] = self._hide(self.data[i]);
                }
                // resolve with data
                resolve(self.data);
            }else if(_.isObject(self.data))
            {
                // 
                self.data = self._append(self.data);
                self.data = self._show(self.data);
                self.data = self._hide(self.data);
                // resolve with data
                resolve(self.data);
            }else{
                reject(Error('Invalid data type.'));
            }
        });
    };

    self._append = function(item)
    {...};

    /**
     * Add all items that are in shown
     * @param item Object
     * @return Object
    */
    self._show = function(item)
    {
       var list = {};
       for(var i in item)
       {
            if( self.show.indexOf(i) != -1 )
            {
                list[i] =  item[i];
            };
       }
       return (self.show.length > 0) ? list : item;
    }

    /**
     * Hide all items in guarded array
     * @param item Object
     * @return Object
    */
    self._hide = function(item)
    {   
        var list = {};
        for(var i in item)
        {
            if(self.guarded.indexOf(i) == -1) 
            {
                list[i] = item[i];
            }
        }
        return (self.guarded.length > 0) ? list : item;
    }

    function _validateProps()
    { ... }

};

我这样称呼函数。

var Foo = new Bar;
Foo.guarded = ["name", "age", "total_scores"];
var dataset = {...}; // could also be [{...}, {...}, {...}]
Foo.make(dataset).then(function(data){
    // do something with the data
});

0 个答案:

没有答案