【问题标题】:Update an array object from an another array从另一个数组更新数组对象
【发布时间】:2018-06-28 09:43:22
【问题描述】:
 $scope.Array1= [{
      Name: 'Alzheimers',
      Value: 1,
      Selected: false
  }, {
      Name: 'Arthritis',
      Value: 2,
      Selected: false
  },{
      Name: 'Cancer',
      Value: 3,
      Selected: false
  }{
      Name: 'Cellulitis',
      Value: 4,
      Selected: false
  }
  ];

$scope.Array2=[1,3];

我想要这样的结果

$scope.Array1= [{
          Name: 'Alzheimers',
          Value: 1,
          Selected: true
      }, {
          Name: 'Arthritis',
          Value: 2,
          Selected: false
      },{
          Name: 'Cancer',
          Value: 3,
          Selected: true
      }{
          Name: 'Cellulitis',
          Value: 4,
          Selected: false
      }
      ];

selected 对象变量(Alzheimers,Cancer)Array2 更新为true? 如果你给出没有循环的建议,那对我来说会很棒。

【问题讨论】:

  • $scope.Array1.forEach(x => x.Selected = ($scope.Array2.indexOf(x.Value) != -1));

标签: javascript arrays angularjs typescript


【解决方案1】:

Array#forEach 迭代array1,检查Value 是否包含在Array2 中,并将结果分配给Selected 属性。此解决方案将改变原始对象。

const array1 = [{"Name":"Alzheimers","Value":1,"Selected":false},{"Name":"Arthritis","Value":2,"Selected":false},{"Name":"Cancer","Value":3,"Selected":false},{"Name":"Cellulitis","Value":4,"Selected":false}];

const array2 = [1, 3];

array1.forEach((o) => o.Selected = array2.includes(o.Value));

console.log(array1);

如果您想要一个包含新对象的新数组,请使用 Array#map 和 Object#assign。

let array1 = [{"Name":"Alzheimers","Value":1,"Selected":false},{"Name":"Arthritis","Value":2,"Selected":false},{"Name":"Cancer","Value":3,"Selected":false},{"Name":"Cellulitis","Value":4,"Selected":false}];

const array2 = [1, 3];

array1 = array1.map((o) => array2.includes(o.Value) ? Object.assign({}, o, {
  Selected: true
}) : o);

console.log(array1);

【讨论】:

    【解决方案2】:

    你可以使用forEach

    let array1 = 
    [
    	{"Name":"Alzheimers","Value":1,"Selected":false},
    	{"Name":"Arthritis","Value":2,"Selected":true},
    	{"Name":"Cancer","Value":3,"Selected":false},
    	{"Name":"Cellulitis","Value":4,"Selected":false}
    ];
    let array2 = [1, 3];
    array1.forEach(x => x.Selected = array2.indexOf(x.Value) != -1);
    console.log(array1);

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-12-09
      • 1970-01-01
      • 2021-11-17
      • 1970-01-01
      • 2021-10-22
      • 2021-03-30
      • 1970-01-01
      相关资源
      最近更新 更多