如何到哪里去(angular.js)

时间:2019-01-24 10:23:16

标签: javascript arrays angularjs foreach push

在此forEach中,我将一些字段推入现有数组中。 我如何过滤掉prop.isRequired = false的地方?

因此:(仅)循环执行schema.properties中的所有内容,其中isRequired = true;

 angular.forEach(vm.schema.properties, function (prop,key) {
   vm.mappingFields.push({      //this is an array
     source: null,                //this gets pushed
     destination: key,            //this gets pushed
     fieldType: prop.type,        //this gets pushed
     isRequired: prop.isRequired, //this gets pushed
   });
 });

2 个答案:

答案 0 :(得分:2)

我将以这种现代方式进行操作:

  vm.mappingFields = vm.schema.properties.filter({ isRequired } => isRequired).map(prop => {
      source: null,
      destination: key,
      fieldType: prop.type,
      isRequired: prop.isRequired
  })

首先我们使用ES6 Array.filter方法,然后仅使用Array.map来生成具有所需字段的新数组,并将新生成的数组分配给vm.mappingFields

我还使用ES6分解{ isRequired } => isRequired来减少代码(prop => prop.isRequired)并使其更易于阅读。

另一件事是,当您生成新数组时,isRequired: prop.isRequired是不必要的,因为我们知道只有带有isRequired: true的元素才出现在这里。因此我将其更改为isRequired: true


当然,使用forEachif条件可以达到与其他贡献者相同的结果,但这并不比我的回答优雅。但是说实话,自从2个数组周期进行评估以来,我的方法需要花费更多的时间来完成,但请记住,我们是为人类而不是为机器编写代码。

答案 1 :(得分:0)

目前,我已像这样修复它,但这似乎不是最干净/体面的方式。如果有人能提出更好的解决方案,我将不胜感激。

   angular.forEach(vm.schema.properties, function (prop, key) {
                        if (prop.isRequired == "true") {
                            vm.mappingFields.push({
                                source: null,
                                destination: key,
                                fieldType: prop.type,
                                isRequired: "Required",
                            });
                        };