javascript - 从对象数组中删除定义的键名
问题描述
这是我的数据过滤器。基于此,我试图从我的数据中删除密钥。我想删除responseKeys
和ratings
数组中提到的键。
我被卡住了,无法从评级数组中删除键。有什么办法可以对这个问题进行递归。
let dataFilter = {
"webPage1": {
"responseKeys": ["releaseDate", "filmName"]
},
"webPage2": {
"responseKeys": ["releaseDate", "ratings"],
"ratings": [
"star2",
"star3"
]
}
}
let data = [{
"filmName": "Avatar",
"releaseDate": "2021-09-24",
"day": "24",
"month": "Sep",
"ratings": [{
"star1": "40",
"star2": "23",
"star3": "56",
"star4": "45"
},
{
"star1": "40",
"star2": "23",
"star3": "56",
"star4": "45"
},
{
"star1": "40",
"star2": "23",
"star3": "56",
"star4": "45"
}
]
},
{
"filmName": "Morgan",
"releaseDate": "2021-03-24",
"day": "24",
"month": "Mar",
"ratings": [{
"star1": "40",
"star2": "23",
"star3": "56",
"star4": "45"
},
{
"star1": "40",
"star2": "23",
"star3": "56",
"star4": "45"
},
{
"star1": "40",
"star2": "23",
"star3": "56",
"star4": "45"
}
]
}
]
const filterResponse = (data, dataFilter = '') => {
if (dataFilter) {
let filterArray = [];
data.forEach((item) => {
let response = Object.keys(item)
.filter(key => dataFilter.responseKeys.includes(key))
.reduce((obj, key) => {
obj[key] = item[key];
return obj;
}, {});
filterArray.push(response);
});
return filterArray;
}
return data;
};
console.log(filterResponse(data, dataFilter['webPage1']));
试图根据我的 json 配置过滤我的数据。
预期产出
//webPage1
[{
"filmName": "Avatar",
"releaseDate": "2021-09-24"
},
{
"filmName": "Morgan",
"releaseDate": "2021-03-24"
}
]
//webPage2
[{
"releaseDate": "2021-09-24",
"ratings: [{
"star2": "23",
"star3": "56"
},
{
"star2": "23",
"star3": "56"
},
{
"star2": "23",
"star3": "56"
}
]
}, {
"releaseDate": "2021-03-24",
"ratings": [{
"star2": "23",
"star3": "56"
}, {
"star2": "23",
"star3": "56"
}, {
"star2": "23",
"star3": "56"
}]
}]
解决方案
你试过很好,但你没有实现ratings
过滤器......
let data = [{ "filmName": "Avatar", "releaseDate": "2021-09-24", "day": "24", "month": "Sep", "ratings": [{ "star1": "40", "star2": "23", "star3": "56", "star4": "45" }, { "star1": "40", "star2": "23", "star3": "56", "star4": "45" }, { "star1": "40", "star2": "23", "star3": "56", "star4": "45" }] }, { "filmName": "Morgan", "releaseDate": "2021-03-24", "day": "24", "month": "Mar", "ratings": [{ "star1": "40", "star2": "23", "star3": "56", "star4": "45" }, { "star1": "40", "star2": "23", "star3": "56", "star4": "45" }, { "star1": "40", "star2": "23", "star3": "56", "star4": "45" }] }]
let filterResponse = (data, dataFilter) => data.map(v => {
let o = {}
dataFilter.forEach(item => o[item] = v[item])
return o
})
console.log("webPage1", filterResponse(data, ["releaseDate", "filmName"]));
console.log("webPage2", filterResponse(data, ["releaseDate", "ratings"]).map(item => {
item.ratings = filterResponse(item.ratings, ["star2", "star3"])
return item
}))
推荐阅读
- javascript - this.context 在 jest/Enzyme 中为空
- django - Django Admin“TypeError int() 参数必须是字符串、类似字节的对象或数字,而不是‘汽车’”
- r - Is there a way to convert a .csv format embedded in a website to an actual csv to use read.csv() on?
- node.js - 反应应用程序中的 Jwt 授权,而不将令牌存储在本地存储中
- php - 删除 laravel 护照用户令牌
- javascript - Gatsby gatsby-remark-relative-images 不会将 yaml 绝对图像路径转换为相对路径
- asp.net-core - 如何在 Blazor 中直接更改 css(无变量)?
- php - 如何使用 PHP 向 Vimeo API 发出经过身份验证的 GET 请求?
- aws-lambda - 使用 lambda API 作为存储在 S3 中的内容的反向代理?
- google-apps-script - 使用 Google Apps 脚本 Web 应用打开电子表格