0

我有一个如下所示的对象。它被称为selectedFilters

selectedFilters = [
  {columnName: "gender", values: ["Male"]},
  {columnName: "approximate_age_band", values: ["18-29", "30-39", "40-49"]}, 
  {columnName: "custom_flag2", values: ["1686", "2245", "2255"]}
]

我有一个名为menuOptions的对象,它具有多个属性,例如模式、currentSelection、过滤器、段等。下面是它的外观。

{toggles: {…}, modes: {…}, viewOptions: {…}, segments: Array(3), filters: {…}, …} currentSelection: {default: "percent", order: 1, label: "View", type: "filter", value: "total", …} filters: {mainFilters: Array(3), standard: Array(4), custom: Array(4), maxFilters: 4} modes: {selected: "trends", options: Array(1)} segments: (3) [{…}, {…}, {…}]

现在我必须使用menuOptions.filters并在其中应用一些逻辑。menuOptions.filters的结构如下所示。

在此处输入图像描述

我想遍历menuOptions.filters.standard

menuOptions.filters.standard = [
  {columnName: "gender", selected: null},
  {columnName: "approximate_age_band", selected: null},
  {columnName: "custom_flag2", selected: null}
]

我想将selectedFiltersmenuOptions.filters.standard进行比较。如果列名匹配,则向menuOptions.filters.standard对象插入一个新属性,使其如下所示。

menuOptions.filters.standard = [
  {columnName: "gender", selected: "Male"},
  {columnName: "approximate_age_band", selected: ""18-29,30-39,40-49""},
  {columnName: "custom_flag2", selected: "1686,2245,2255"}
]

我尝试过以下方式。

let i = 0;
selectedFilterList.forEach(function (choice) {

    if(this.menuOptions.filters.standard[i]['columnName'] === choice['columnName']){
        this.menuOptions.filters.standard[i]['selected'] = choice['values'];
        i = i+1;
    }
});

但上述逻辑抛出错误:core.js:4002 ERROR TypeError: Cannot read property 'menuOptions' of undefined。但是在循环之外,我可以访问 this.menuOptions。里面是抛出错误。

4

1 回答 1

0

尝试使用arrow function(=>) 代替function:)

let i = 0;

selectedFilterList.forEach((choice) => {

  if(this.menuOptions.filters.standard[i]['columnName'] === choice['columnName']){
      Convert the values to string and do assignment
    i = i+1;
  }
});

我希望它会帮助你!快乐并拥有一个干净的代码:)

于 2021-01-21T04:01:25.820 回答