javascript - 从对象中删除键的优化方法是什么?
问题描述
我有一个用例从 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);
}
};
解决方案
你可以很容易地用 lodash 做到这一点。
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
推荐阅读
- python - 如何用数值替换分类值?
- windows - 如何自动接受打印机的状态窗口?
- typo3 - 实体到数据图/数组
- parallel-processing - SM(流式多处理器)、活动块和活动扭曲在 GPU 中如何表现?
- python-3.x - **Kwargs 0 位置参数错误
- python-2.7 - Jpype 在 Windows Python 2.7 上使用 jpype.startJVM 命令崩溃
- ios - LinkedIn集成到objective-c iOS,无需安装LinkedIn App
- c# - Azure ML Studio Web 服务后的值更改
- c# - C# - Visual Studio 2017 - 获取预定义方法的实际代码
- javascript - 在 componentDidMount 上清除条件状态