js删除key js对象除了指定的几个key保留,清除其它?
{"proCostType": "01","payment": "01","amount": 0,"invoiceCount": 0,"excludeTax": 0,"addedTax": 0,"pa
顺晟科技
2022-09-25 07:22:23
53
{
"proCostType": "01",
"payment": "01",
"amount": 0,
"invoiceCount": 0,
"excludeTax": 0,
"addedTax": 0,
"passengerAmount": 0,
"fuelSurchargeAmount": 0,
"moneyCheck": false,
"empCode": "",
"memo": "",
"branch": "",
"list": [],
"taxRate": "6%",
"pageTitle": "成本录入",
"serverBranch": "SH",
"realOprBranchName": "上海",
"realOprBranch": "SH",
"inputDate": "2022-08-10",
"dictProCostType": [
{
"code": "01",
"value": "专项成本"
},
{
"code": "05",
"value": "专项成本(国内机票)"
},
{
"code": "06",
"value": "专项成本(国内火车票)"
},
{
"code": "07",
"value": "专项成本(国内公路水路车票)"
},
{
"code": "08",
"value": "专项成本(交通费-电子)"
},
{
"code": "02",
"value": "代付项"
},
{
"code": "03",
"value": "外部劳务费"
},
{
"code": "04",
"value": "餐费"
},
{
"code": "09",
"value": "内部结算"
},
{
"code": "10",
"value": "物料"
},
{
"code": "12",
"value": "大萨达所大所"
},
{
"code": "13",
"value": "成长型创新支撑着"
}
],
"dictRecCompany": [
{
"code": "01",
"orderby": "01",
"value": "上海312321"
},
{
"code": "141",
"orderby": "03",
"value": "上海412421421"
},
{
"code": "172",
"orderby": "04",
"value": "上海421421421421"
}
]
}
数据如上,想要保留dictProCostType和dictRecCompany数组,其它字段清空,应该如何处理
const obj = {
a: 1,
b: 2,
c: [1,2,3],
}
for (const key of Object.keys(obj)) {
if (key !== 'a' || key !== 'b') {
// delete obj[key];
// obj[key] = null;
obj[key] = '';
}
}
console.log(obj);
也可以直接返回个新的对象吧
一样的问题,请参考:如何保留对象中的某些属性?
虽然这种问题是回答过的,但是懒得去找了,干脆再回答一次。
已经明确的知道需要取哪些属性,那么可以直接用硬代码来取,解构再组合成对象就可以了
function getWant(source) {
const { dictProCostType, dictRecCompany } = source;
return { dictProCostType, dictRecCompany };
}
console.log(getWant(obj));
如果想要取的属性是一个字符串列表(或者做成一个字符串列表),可以拆解对象,筛选再组合成对象的方式:
function getWant(source, props) {
return Object.fromEntries(
Object.entries(source)
.filter(([key]) => props.includes(key))
);
}
console.log(getWant(obj, ["dictProCostType", "dictRecCompany"]));
不过既然是用的 filter,所以也可以做得更灵活一些,直接通过 filter 函数来选择属性,
function getWant(source, filter) {
return Object.fromEntries(Object.entries(source).filter(filter));
}
console.log(getWant(obj, ([, value]) => Array.isArray(value)));
上面这个示例筛选了值是数组的属性(会包含那个名为 list
的属性)。
有时候可以换个思路,你可以创建一个新的对象,让它只包含这两个数据
// source 为你上面的对象
const obj = Object.create(null);
obj.dictProCostType = source.dictProCostType;
obj.dictRecCompany = source.dictRecCompany;
如果你是在先删属性,可以这样删
Object.getOwnPropertyNames(obj).forEach(key => {
if(key !=="dictProCostType" && key !== "dictRecCompany"){
delete obj[key]
}
})
了解下 lodash 或 underscore 的 pick 和 omit 方法
var object = { 'a': 1, 'b': '2', 'c': 3 };
_.omit(object, ['a', 'c']);
// => { 'b': '2' }
pick、omit
当然想自己实现也很容易
25
2022-09
16
2022-09
15
2022-09
15
2022-09
15
2022-09
25
2021-10