Javascript 如何使用JQuery过滤JSON对象并创建新对象?
我有一个JSON数据库,需要对其进行过滤,然后才能显示一个参数,即仅按类别显示选定元素的ActivityName 我需要能够过滤和获取一个类别内所有活动的活动名称,具体取决于用户选择的活动 我正在尝试通过执行以下操作来创建一个具有此数据库过滤版本的对象:Javascript 如何使用JQuery过滤JSON对象并创建新对象?,javascript,jquery,json,Javascript,Jquery,Json,我有一个JSON数据库,需要对其进行过滤,然后才能显示一个参数,即仅按类别显示选定元素的ActivityName 我需要能够过滤和获取一个类别内所有活动的活动名称,具体取决于用户选择的活动 我正在尝试通过执行以下操作来创建一个具有此数据库过滤版本的对象: var selectedCategory = $(activitiesDatabase.Categories).filter(function(i, n) { return n.CategoryID === selectedCatego
var selectedCategory = $(activitiesDatabase.Categories).filter(function(i, n)
{
return n.CategoryID === selectedCategory;
});
但它显然不起作用。我该怎么解决这个问题呢
谢谢!下面是JSON数据库的示例
jQuery的过滤器设计用于处理一组匹配的DOM元素 您不需要jQuery,Array.prototype.filter将完成以下工作: var Activities Database={类别:[{CategoryId:现金流,活动:[{ActivityName:测量和分析现金流,估计时间:20},{ActivityName:测量和分析现金流,估计时间:20},]},{CategoryId:增长战略,活动:[{ActivityName:研究市场和确定趋势,估计时间:30},{活动名称:研究市场和确定趋势,估计时间:30},]},]}; const activitiesByCategoryId=categoryId=>activitiesDatabase.Categories.filter{categoryId}=>categoryId===categoryId
console.logactivitiesByCategoryId'cashFlow'这是一个版本,主要使用数组的方法获取某个类别的ActivityName列表。如果您需要包装这些活动名称的所有对象,可以简化此操作 var activitiesDatabase={Categories:[ { 类别ID:现金流, 活动:[ {ActivityName:测量和分析现金流,估计时间:20}, {ActivityName:测量和分析现金流,估计时间:20}, ] }, { 类别ID:增长战略, 活动:[ {活动名称:研究市场和确定趋势,估计时间:30}, {活动名称:研究市场和确定趋势,估计时间:30}, ] }, ]}; //下一个方法接收类别数组、类别ID和返回值 //与该类别相关的活动名称列表。 常量getActivityNamesByCategory=catArray,catID=> { //检查参数。 catArray=catArray.constructor==Array?catArray:[]; //生成输出列表。 让actNames=catArray.reduceres,curr=> { 如果curr.CategoryId==catID curr.Activities.mapx=>res.pushx.ActivityName; 返回res; }, []; 返回姓名; }; //测试1 let out1=getActivityNamesByCategoryactivitiesDatabase.Categories,现金流; console.logout1; //测试2 let out2=getActivityNamesByCategoryactivitiesDatabase.Categories,growthStrategies; console.logout2; //测试错误的输入1 let out3=getActivityNamesByCategoryactivitiesDatabase,asd; console.logout3; //测试错误输入2 let out4=getActivityNamesByCategoryactivitiesDatabase.Categories;
console.logout4;我欣赏ES6单行程序的简洁性,尽管我觉得尝试使用jQuery进行直接数组过滤的人可能会受益于更详细的执行工作,这非常完美!非常感谢!我们在此进行后续工作:我允许用户选择多个活动,并希望添加活动ty EstimatedTimes。这是类似的解决方案吗?如果您还需要EstimatedTimes,请尝试将reduce方法中的if条件更改为以下条件:if curr.CategoryId==catID curr.Activities.mapx=>res.pushx;
var activitiesDatabase =
{
"Categories": [
{
"CategoryId": "cashFlow",
"Activities": [
{
"ActivityName": "Measure and analyse cash flows" ,
"EstimatedTime": 20
},
{
"ActivityName": "Measure and analyse cash flows" ,
"EstimatedTime": 20
},
]
},
{
"CategoryId": "growthStrategies",
"Activities": [
{
"ActivityName": "Research market and identify trends" ,
"EstimatedTime": 30
},
{
"ActivityName": "Research market and identify trends" ,
"EstimatedTime": 30
},
]
},
]
};