在此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
});
});
答案 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
>
当然,使用forEach
和if
条件可以达到与其他贡献者相同的结果,但这并不比我的回答优雅。但是说实话,自从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",
});
};