angular - _.forEach 循环值改变所有继承的数据

标签 angular typescript foreach underscore.js lodash

我正在尝试嵌套 2 _.forEach;

_.forEach(this.operationTypes, (value: any, key) => {
  value.Terms = [];
  this.operationLimits.push(value);
  _.forEach(this.operationTerms, (subValue: OperationTerm, subKey) => {
    let typeTerms = _.filter(this.operationTypeTerms, { OperationType: { Id: value.Id }, OperationTerm: { Id: subValue.Id } });
    subValue.TypeTerms = typeTerms[0];
    this.operationLimits[key].Terms.push(subValue);
  });
});

但它创建的所有 TypeTerms 值都与上一个循环的值相同。 这意味着新值是从我的 foreach 循环 subValue 继承的,如果 subValue 发生变化,所有由此分配的值都会自动更改。

如何预防?

谢谢

编辑:

应该是这样的

[
{
 Active: true,
 Id: 2,
 Name: "Cash Out",
 Terms: [
  {
   Id: 2,
   Name: "Daily Limit",
   TypeTerms: "Forbidden" -> all of these are same 'forbidden', but it could be 'forbidden' or 'allowed'. At the end of the loop all data changed to forbidden, because the last datas TypeTerms value is 'forbidden'
  },
  {
   Id: 3,
   Name: "Weekly Limit",
   TypeTerms: "Forbidden"
  }
 ]
},
{
 Active: true,
 Id: 3,
 Name: "Top Up",
 Terms: [
  {
   Id: 2,
   Name: "Daily Limit",
   TypeTerms: "Forbidden"
  },
  {
   Id: 3,
   Name: "Weekly Limit"
   TypeTerms: "Forbidden"
  }
 ]
}
]

最佳答案

  • 不知道 operationTerms、operationTypes & 的输入参数 operationTypeTerms,很难产生所需的输出。然而 基于问题逻辑和提供的输出我假设输入 带来您想要的结果。
  • 请注意,我在这里使用了简单的下划线,但没有使用斜线 尽管如此,这不应该影响逻辑

operationTypes = [{
  "Active": true,
  "Id": 2,
  "Name": "Cash Out"
}, {
  "Active": true,
  "Id": 3,
  "Name": "Top Up"
}]

operationTerms = [{
  Id: 2,
  Name: "Daily Limit"
}, {
  Id: 3,
  Name: "Weekly Limit"
}]

operationTypeTerms = [{
  "operationTypeId": 2,
  "operationTermId": 2,
  TypeTerms: ["Forbidden"]
}, {
  "operationTypeId": 3,
  "operationTermId": 3,
  TypeTerms: ["Allowed", "Forbidden"]
}, {
  "operationTypeId": 3,
  "operationTermId": 2,
  TypeTerms: ["Forbidden"]
}, {
  "operationTypeId": 2,
  "operationTermId": 3,
  TypeTerms: ["Allowed", "Forbidden"]
}]


var result = [];
_.each(operationTypes, function(type) {
  var typeObj = _.extend(type, {});
  var terms = [];
  _.each(operationTerms, function(term) {
    var val = _.extend(term, {});
    var typeTermObj = _.filter(operationTypeTerms, {
      operationTypeId: type.Id,
      operationTermId: term.Id
    });
    val.TypeTerms = typeTermObj[0].TypeTerms[0];
    terms.push(val);
  });
  typeObj.Terms = terms;
  result.push(typeObj)
});

$("#result").html(JSON.stringify(result))
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/underscore.js/1.8.3/underscore-min.js"></script>
<div id="result"></div>

关于angular - _.forEach 循环值改变所有继承的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40685755/

相关文章:

angular - 找不到模块 Angular2 Typescript

angular - 将焦点设置在 &lt;input&gt; 元素上

javascript - Angular material displayWith 不适用于 ngx-translate

c# - 在 foreach 循环中修改集合时出现异常

javascript - forEach 只打印最后一个值,这是 javascript 中典型的闭包问题

angular - 在 Angular2 中传递组件

angular - 构建 Angular 代码源以贡献时出错

typescript - 如何以字符串作为参数调用Math.round?

typescript - create-react-app 保留 ES5 后的 JavaScript

java - 迭代循环并根据条件检查设置新值 - java