问题描述
const addressNonrequired = ["addr_linkid_usr","addr_created","addr_updated"]
我知道我可以使用 'delete' 方法,但是我将如何使用上面的数组来做同样的事情:
// remove non-required data
addressesFound.forEach(row => (
// delete row.addr_linkid_usr,// delete row.addr_created,// delete row.addr_updated
addressNonrequired.forEach(item => (
delete row[item];
));
));
我已经尝试了几种方法来让它发挥作用,但不确定我是否以正确的方式看待它......?
提供的数组示例:
[
{
"addr_id": "41d86d46-8b19-4f4e-be03-f9915ef4947b","addr_type": "postal","addr_linkid_usr": "user1","addr_created": "2021-03-10","addr_updated": "","addr_active": true,"addr_postal_as_residential": false,"addr_international": false,"addr_autocomplete_id": null
},{
"addr_id": "b18c2ca6-29cf-4114-9067-b37fd3394638","addr_type": "residential","addr_postal_as_residential": true,"addr_international": true,"addr_autocomplete_id": "string"
}
]
预期输出:
[
{
"addr_id": "41d86d46-8b19-4f4e-be03-f9915ef4947b","addr_autocomplete_id": "string"
}
]
解决方法
您必须遍历 addressesFound
数组,并在每个对象中遍历该对象的键,比较 addressNonRequired
数组中是否存在该键并将其删除(如果适用)。
var addressesFound = [{
"addr_id": "41d86d46-8b19-4f4e-be03-f9915ef4947b","addr_type": "postal","addr_linkid_usr": "user1","addr_created": "2021-03-10","addr_updated": "","addr_active": true,"addr_postal_as_residential": false,"addr_international": false,"addr_autocomplete_id": null
},{
"addr_id": "b18c2ca6-29cf-4114-9067-b37fd3394638","addr_type": "residential","addr_postal_as_residential": true,"addr_international": true,"addr_autocomplete_id": "string"
}
];
const addressNonRequired = ["addr_linkid_usr","addr_created","addr_updated"];
var updatedAddresses = addressesFound.map(function(address) {
Object.keys(address).forEach(function(key) { // For each address object,iterate over the keys
if (addressNonRequired.includes(key)) {
delete address[key]; // Check if the key is present in the addressNonRequired array. Delete if present
}
});
return address;
});
console.log(updatedAddresses);
在过滤对象或对象数组时,我总是经常使用它。
我通常在我的 helpers.ts
文件中有这些。他们还确保您要过滤的键确实存在于对象中,并且它还具有自动完成功能。
export function except<T,K extends keyof T>(data: T,keys: Array<K>) {
const copy = { ...data };
for (const key of keys) {
if (key in copy) {
delete copy[key];
}
}
return copy;
}
export function exceptMany<T,K extends keyof T>(data: Array<T>,keys: Array<K>) {
return [...data].map((item) => except(item,keys));
}
然后为了过滤一个对象数组,我们这样做:
const data = [
{
"addr_id": "41d86d46-8b19-4f4e-be03-f9915ef4947b","addr_autocomplete_id": "string"
}
];
const results = exceptMany(data,['addr_linkid_usr','addr_created','addr_updated']);
也可以仅从一个对象中过滤键:
const single = {
"addr_id": "41d86d46-8b19-4f4e-be03-f9915ef4947b","addr_autocomplete_id": null
};
const filteredSingle = except(single,'addr_updated']);