Глядя, чтобы отфильтровать массив и превратить их в 2 массива на основе флага, если true или false - PullRequest
0 голосов
/ 28 января 2019

Я планирую отфильтровать массив в 2 отдельных массива, основываясь на флаге в одном из внутренних массивов, но у меня возникли проблемы.Пожалуйста, помогите мне с моим кодом.Как мы получаем 2 отдельных массива из apiData для фильтрации объектов в массиве типов на основе значения флага

var apiData = [{
  "id": 1,
  "types": [{
    "id": "1.1",
    "flag": true,
    },
    "id": "1.2",
    "flag": false
    }]
  },
  "id": 2,
  "types": [{
    "id": "2.1",
    "flag": true,
    }]
  }
]


My Result should be like this for filteredTrueArray [{
  "id": 1,
  "types": [{
    "id": "1.1",
    "flag": true,
    }]
  },
  "id": 2,
  "types": [{
    "id": "2.1",
    "flag": true,
    }]
  }
]


I wanted $scope.filteredTrueArray to have types array with flag=true value objects and another array to have types array with only flag=false objects. Below is my code

$scope.filteredTrueArray = apiData.filter(function(item) {
var isTrueFound = item.types.some(function (el) {
  return el.flag == true;
});
if(isTrueFound){
  for(var i=0;i<item.types.length>0;i++)
  {
    if(item.types[i].flag == true){
      $scope.filteredTrueArray.push(item.types[i]);
    }
  }
}
});

Ответы [ 3 ]

0 голосов
/ 28 января 2019

Одним из решений является использование map () с фильтром () для получения нового массива types.

var apiData = [
  {
    "id": 1,
    "types": [
      {"id": "1.1", "flag": true},
      {"id": "1.2", "flag": false}
    ]
  },
  {
    "id": 2,
    "types": [
      {"id": "2.1", "flag": true}
    ]
  }
];

let filteredTrueArray = apiData.map(
    ({id, types}) => ({id, types: types.filter(x => x.flag)})
)
.filter(({types}) => types.length);

let filteredFalseArray = apiData.map(
    ({id, types}) => ({id, types: types.filter(x => !x.flag)})
)
.filter(({types}) => types.length);

console.log("FilteredTrueArray:", filteredTrueArray);
console.log("FilteredFalseArray:", filteredFalseArray);
0 голосов
/ 28 января 2019

Вот пример кода, который создает объект с логическим значением и создает 2 массива баз объектов, исходя из их логического значения.Извините, если я неправильно понял, что вы искали.

var objArray = [];
class testObj {
  constructor(Oname, test1) {
    this.name = Oname;
    this.isABoolean = test1;
    objArray.push(this);
  }
}

var test1 = new testObj("test1", false);
var test2 = new testObj("test2", true);
var test3 = new testObj("test3", false);
var test4 = new testObj("test4", true);
var test5 = new testObj("test5", false);
var objArray = [test1, test2, test3, test4, test5];
var trueArray = [];
var falseArray = [];

function createArrays() {
  for (var i = 0; i < objArray.length; i++) {
    if (objArray[i].isABoolean === true) {
      trueArray.push(objArray[i]);
      //console.log(trueArray[i].name);
    } else if (objArray[i].isABoolean === false) {
      falseArray.push(objArray[i]);
      }
    }
  }
  createArrays();
  for (var j = 0; j < trueArray.length; j++) {
    console.log("True value: " + trueArray[j].name);
  }
  for (var k = 0; k < falseArray.length; k++) {
    console.log("False value " + falseArray[k].name);
  }

РЕДАКТИРОВАТЬ: Я очистил его, чтобы автоматически добавлять объекты в массив при создании.

0 голосов
/ 28 января 2019

Я написал простую функцию фильтра.Пожалуйста, посмотрите!

var apiData = [{
  "id": 1,
  "types": [{
    "id": "1.1",
    "flag": true,
  }, {
    "id": "1.2",
    "flag": false
  }]
}, {

  "id": 2,
  "types": [{
    "id": "2.1",
    "flag": true,
  }]
}];

function filterByTypeFlag(records, flagValue) {
  var filtered = [];

  records.forEach(function (record) {
    var matchedTypes = [];

    record.types.forEach(function (type) {
      if (type.flag === flagValue) {
        matchedTypes.push(type);
      }
    });

    if (matchedTypes.length) {
      filtered.push({
        "id": record.id,
        "types": matchedTypes
      });
    }
  });
  return filtered;
}

filterByTypeFlag(apiData, true);
filterByTypeFlag(apiData, false);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...