此脚本以递归方式删除属性,但矢量中报告的数据除外。
您需要lodash库
-功能
function removeKeysExcept(object, keysExcept = [], isFirstLevel = true) {
let arrayKeysExcept = [],
arrayNextKeysExcept = {};
_.forEach(keysExcept, (value, i) => {
let j = value.split('.');
let keyExcept = j[0];
arrayKeysExcept.push(keyExcept);
j.shift();
if (j.length) {
j = j.join('.');
if (!arrayNextKeysExcept[keyExcept]) {
arrayNextKeysExcept[keyExcept] = [];
}
arrayNextKeysExcept[keyExcept].push(j);
}
})
_.forEach(arrayNextKeysExcept, (value, key) => {
removeKeysExcept(object[key], value, false);
});
if (isFirstLevel) {
return;
}
Object.keys(object).forEach(function (key) {
if (arrayKeysExcept.indexOf(key) == -1) {
delete object[key];
}
});
}
运行:
-删除除第一级并在向量中报告的所有属性:
removeKeysExcept(obj, ['department.id','user.id']);
-删除所有属性
removeKeysExcept(obj, ['department.id','user.id'], false);
-示例:
let obj = {
a: {
aa: 1,
ab: {
aba: 21
}
},
b: 10,
c: {
ca: 100,
cb: 200
}
};
removeKeysExcept(obj, ['a.ab.aba','c.ca']);
removeKeysExcept(obj, ['a.ab.aba','c.ca'], false);
removeKeysExcept(obj);
removeKeysExcept(obj, [], false);