Как для каждого где (angular.js) - PullRequest
0 голосов
/ 24 января 2019

В этом 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 голосов
/ 24 января 2019

Пока я исправил это так, но это не похоже на самый чистый / приличный способ.Если бы кто-нибудь мог придумать лучшее решение, я был бы признателен.

   angular.forEach(vm.schema.properties, function (prop, key) {
                        if (prop.isRequired == "true") {
                            vm.mappingFields.push({
                                source: null,
                                destination: key,
                                fieldType: prop.type,
                                isRequired: "Required",
                            });
                        };
0 голосов
/ 24 января 2019

Я бы сделал это по-современному, вот так:

  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 Destructuring { isRequired } => isRequired, чтобы уменьшить код (prop => prop.isRequired) и сделать его более удобным для чтения.

Еще одна вещь, когда вы генерируете новый массив, isRequired: prop.isRequired не нужен, поскольку мы знаем, что сюда попали только элементы с isRequired: true, поэтому я бы изменил его на isRequired: true


Конечно, вы можете достичь того же результата, используя условия forEach и if внутри, как упоминали другие участники, но это не так элегантно, как мой ответ. Но, честно говоря, мой метод требует чуть больше тиков для завершения после 2 циклов оценки массива, но помните, что мы пишем код для людей, а не для машин.

...