Javascript 如何找到位置(angular.js)
在这个forEach中,我将一些字段放入现有数组中。 如何筛选出prop.isRequired=false的位置 因此:(仅)循环schema.properties中的所有内容,其中isRequired=trueJavascript 如何找到位置(angular.js),javascript,arrays,angularjs,foreach,push,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,
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
});
});
我会用这样的现代方式:
vm.mappingFields = vm.schema.properties.filter({ isRequired } => isRequired).map(prop => {
source: null,
destination: key,
fieldType: prop.type,
isRequired: prop.isRequired
})
首先,我们使用ES6Array.filter
方法,然后使用Array.map
生成带有所需字段的新数组,并将新生成的数组分配到vm.mappingFields
此外,我还使用ES6解构{isRequired}=>isRequired
来减少代码(prop=>prop.isRequired
)并使其更易于阅读
还有一件事是,当您生成新数组时,isRequired:prop.isRequired
是不必要的,因为我们知道只有带有isRequired:true
的元素出现在这里。。因此,我将其更改为isRequired:true
当然,您可以使用
forEach
和if
条件实现与其他贡献者提到的相同的结果,但这并不像我的回答那样优雅。但老实说,由于要计算2个数组周期,所以我的方法需要稍微多点滴答声才能完成,但请记住,我们是为人类编写代码的,而不是为机器编写代码的。我会以现代方式这样做:
vm.mappingFields = vm.schema.properties.filter({ isRequired } => isRequired).map(prop => {
source: null,
destination: key,
fieldType: prop.type,
isRequired: prop.isRequired
})
首先,我们使用ES6Array.filter
方法,然后使用Array.map
生成带有所需字段的新数组,并将新生成的数组分配到vm.mappingFields
此外,我还使用ES6解构{isRequired}=>isRequired
来减少代码(prop=>prop.isRequired
)并使其更易于阅读
还有一件事是,当您生成新数组时,isRequired:prop.isRequired
是不必要的,因为我们知道只有带有isRequired:true
的元素出现在这里。。因此,我将其更改为isRequired:true
当然,您可以使用
forEach
和if
条件实现与其他贡献者提到的相同的结果,但这并不像我的回答那样优雅。但老实说,我的方法需要稍多的滴答声才能完成,因为需要计算2个数组周期,但请记住,我们为人类编写代码,而不是为机器编写代码。现在我这样修复了它,但这似乎不是最干净/体面的方式。如果有人能想出更好的解决办法,我将不胜感激
angular.forEach(vm.schema.properties, function (prop, key) {
if (prop.isRequired == "true") {
vm.mappingFields.push({
source: null,
destination: key,
fieldType: prop.type,
isRequired: "Required",
});
};
现在我是这样修复的,但这似乎不是最干净/体面的方式。如果有人能想出更好的解决办法,我将不胜感激
angular.forEach(vm.schema.properties, function (prop, key) {
if (prop.isRequired == "true") {
vm.mappingFields.push({
source: null,
destination: key,
fieldType: prop.type,
isRequired: "Required",
});
};
用
if
环绕你的push
@tkausl,我用了这个,它很管用,谢谢。感觉这不是最体面的方式,但它可以在你的推送@tkausl周围使用if
,我使用了这个,它可以工作,谢谢。它感觉不是最合适的方式,但它可以工作谢谢Max,但它会产生=>(js)',但你会丢失键。您必须先映射,然后过滤,才能保留原始密钥。@tkausl哦,是的,谢谢。。我还没有在浏览器中真正测试过它。。只是一个ideaThanks Max,但它会显示=>(js)“,”但是您会丢失键。您必须先映射,然后过滤,才能保留原始密钥。@tkausl哦,是的,谢谢。。我还没有在浏览器中真正测试过它。。只是个主意