Javascript 如何找到位置(angular.js)

Javascript 如何找到位置(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,

在这个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
   });
 });

我会用这样的现代方式:

  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个数组周期,所以我的方法需要稍微多点滴答声才能完成,但请记住,我们是为人类编写代码的,而不是为机器编写代码的。

我会以现代方式这样做:

  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个数组周期,但请记住,我们为人类编写代码,而不是为机器编写代码。

现在我这样修复了它,但这似乎不是最干净/体面的方式。如果有人能想出更好的解决办法,我将不胜感激

   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哦,是的,谢谢。。我还没有在浏览器中真正测试过它。。只是个主意