代码之家  ›  专栏  ›  技术社区  ›  rohitwtbs

从对象中删除键的优化方法是什么?

  •  1
  • rohitwtbs  · 技术社区  · 6 年前

    我有一个从JSON对象或对象数组中删除多个键的用例。下面是我的代码。如果有人对此有更优化的方法,请建议。

           exports.removeAttributes = function (arrayOfAttributesToRemove, object, callback) {
        let checkForRemoveOrRetain = true;
        removeORRetain(arrayOfAttributesToRemove, object, checkForRemoveOrRetain, (err, object) => {
            if (err) {
                callback(err);
            } else {
                callback( object);
            }
        });
    };
    exports.retainAttributes = function (arrayOfAttributesToRetain, object, callback) {
        let checkForRemoveOrRetain = false;
        removeORRetain(arrayOfAttributesToRemove, object, checkForRemoveOrRetain, (err, object) => {
            if (err) {
                callback(err);
            } else {
                callback(object);
            }
        });
    }
    
        let removeORRetain = function (arrayOfAttributesToRemove, object, checkForRemoveOrRetain, callback) {
        if (Array.isArray(object)) {
            for (let i = 0; i < object.length; i++) {
                for (let key in object[i]) {
                    if (arrayOfAttributesToRemove.includes(key) === checkForRemoveOrRetain) {
                        delete object[i][key];
                    }
                }
            }
            callback(object);
        } else {
            for (let key in object) {
                if (arrayOfAttributesToRemove.includes(key) === checkForRemoveOrRetain) {
                    delete object[key];
                }
            }
            callback( object);
        }
    }; 
    
    1 回复  |  直到 6 年前
        1
  •  1
  •   Abhyudit Jain    6 年前

    你可以很容易地用洛达斯做这件事。

    
    const _ = require('lodash');
    
    exports.removeAttributes = function (arrayOfAttributesToRemove, object, callback) {
       // check for errors etc. Then
    
       // Create an array of objects if not already.
       const arr = _.concat([], object);
       // call callback with new arr with omitted properties using _.map and _.omit
       callback(null, _.map(arr, e => _.omit(e, arrayOfAttributesToRemove)));
    };
    

    如果要保留属性,请使用 _.pick