我正在尝试在嵌套的对象数组中找到一个值并更新它。更具体地说,在下面的数组中,我试图OptionCode
根据字符串查找并将相应的选项设置为blocked
。搜索字符串存储在一个数组中。
初始数组:
filters: [
{
FilterCode: "TourPrice",
FilterName: "Tour Price",
FilterIcon: show_Dollar,
Options: [
{
Name: "Free",
OptionCode: "Free",
active: false,
blocked: false,
forbiddenFilterOptionCode: ["LowestPrice"],
},
{
Name: "Paid",
OptionCode: "Paid",
active: false,
blocked: false,
forbiddenFilterOptionCode: [],
},
{
Name: "Free and Paid",
OptionCode: "FreeAndPaid",
active: true,
blocked: false,
forbiddenFilterOptionCode: [],
},
],
},
{
FilterCode: "SortedBy",
FilterName: "Sorted By",
FilterIcon: show_Sort,
Options: [
{
Name: "Most Relevant",
OptionCode: "MostRelevant",
active: true,
blocked: false,
forbiddenFilterOptionCode: [],
},
{
Name: "Latest Tour",
OptionCode: "LatestTour",
active: false,
blocked: false,
forbiddenFilterOptionCode: [],
},
{
Name: "Oldest Tour",
OptionCode: "OldestTour",
active: false,
blocked: false,
forbiddenFilterOptionCode: [],
},
{
Name: "Lowest Price",
OptionCode: "LowestPrice",
active: false,
blocked: false,
forbiddenFilterOptionCode: ["Free", "FreeAndPaid],
},
],
},
],
对于以下搜索输入["Free", "FreeAndPaid"]
,需要以下数组。
预期结果数组
filters: [
{
FilterCode: "TourPrice",
FilterName: "Tour Price",
FilterIcon: show_Dollar,
Options: [
{
Name: "Free",
OptionCode: "Free", // Find OptionCode
active: false,
blocked: true, // set blocked to true
forbiddenFilterOptionCode: ["LowestPrice"],
},
{
Name: "Paid",
OptionCode: "Paid",
active: false,
blocked: false,
forbiddenFilterOptionCode: [],
},
{
Name: "Free and Paid",
OptionCode: "FreeAndPaid", // Find OptionCode
active: true,
blocked: true, // set blocked to true
forbiddenFilterOptionCode: [],
},
],
},
{
FilterCode: "SortedBy",
FilterName: "Sorted By",
FilterIcon: show_Sort,
Options: [
{
Name: "Most Relevant",
OptionCode: "MostRelevant",
active: true,
blocked: false,
forbiddenFilterOptionCode: [],
},
{
Name: "Latest Tour",
OptionCode: "LatestTour",
active: false,
blocked: false,
forbiddenFilterOptionCode: [],
},
{
Name: "Oldest Tour",
OptionCode: "OldestTour",
active: false,
blocked: false,
forbiddenFilterOptionCode: [],
},
{
Name: "Lowest Price",
OptionCode: "LowestPrice",
active: false,
blocked: false,
forbiddenFilterOptionCode: ["Free", "FreeAndPaid"],
},
],
},
],
您可以使用下面的功能。我做filters
了一个变量,因为从你的问题中不清楚它是什么对象的属性。
解决方案是迭代数组,然后迭代选项对象,最后检测该对象的 OptionCode 值是否在您的目标值中。
在filters
这样的结构被修改来代替:
function setBlocked(filters, target) {
for (let filter of filters) {
for (let option of filter.Options) {
if (target.includes(option.OptionCode)) {
option.blocked = true;
}
}
}
}
let filters = [{FilterCode: "TourPrice",FilterName: "Tour Price",FilterIcon: "show_Dollar",Options: [{Name: "Free",OptionCode: "Free",active: false,blocked: false,forbiddenFilterOptionCode: ["LowestPrice"],},{Name: "Paid",OptionCode: "Paid",active: false,blocked: false,forbiddenFilterOptionCode: [],},{Name: "Free and Paid",OptionCode: "FreeAndPaid",active: true,blocked: false,forbiddenFilterOptionCode: [],},],},{FilterCode: "SortedBy",FilterName: "Sorted By",FilterIcon: "show_Sort",Options: [{Name: "Most Relevant",OptionCode: "MostRelevant",active: true,blocked: false,forbiddenFilterOptionCode: [],},{Name: "Latest Tour",OptionCode: "LatestTour",active: false,blocked: false,forbiddenFilterOptionCode: [],},{Name: "Oldest Tour",OptionCode: "OldestTour",active: false,blocked: false,forbiddenFilterOptionCode: [],},{Name: "Lowest Price",OptionCode: "LowestPrice",active: false,blocked: false,forbiddenFilterOptionCode: ["Free", "FreeAndPaid"],},],},];
setBlocked(filters, ["Free", "FreeAndPaid"]);
console.log(filters);
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句