Поиск данных в массиве js

217
24 апреля 2018, 02:55

Всем привет,имеется вот такой массив данных

var obj = [{
    name: 'Test',
    expirence: '364 days',
    Frontender: true,
    Backender: true,
    company: 'aaa'
  },
  {
    name: 'Test 2',
    expirence: '367 days',
    Frontender: true,
    Backender: false,
    company: 'aaa'
  },
  {
    name: 'Test 3',
    expirence: '731 days',
    Frontender: true,
    Backender: false,
    company: 'Cccc'
  },
 {
    name: 'Test 4',
    expirence: '731 days',
    Frontender: true,
    Backender: false,
    company: ''
  }
];

Как найти:

1) есть ли в массиве хотя бы один Fullstack (фронтендер и бекендер одновременно)

2) являются ли все разработчики фронтедерами

3) всех работающих в компании например "aaa"

4) все ли работают в компании (у всех ли поле 'company' заполнено)

Буду очень благодарен

Answer 1

У массива в js есть масса полезных методов. Нас интересует пара:

  • filter(callback) - возвращает новый массив с элементами, для которых callback(element) вернул truthy значение (нечто, что приводится к true, непустая строка, ненулевое число и т.п.)
  • every(callback) - возвращает true если callback(element) возвращает truthy значение для каждого элемента в массиве
  • some(callback) - возвращает true если callback(element) возвращает truthy значение хотя бы для одного элемента в массиве

// Исходные данные 
var data = [{name: 'Test', expirence: '364 days', Frontender: true, Backender: true, company: 'aaa'}, {name: 'Test 2', expirence: '367 days', Frontender: true, Backender: false, company: 'aaa'}, {name: 'Test 3', expirence: '731 days', Frontender: true, Backender: false, company: 'Cccc'}, {name: 'Test 4', expirence: '731 days', Frontender: true, Backender: false, company: ''} ]; 
 
// 1. Есть ли fullstack? 
// Применим фильтр 
let hasFullstack = data.some(e => e.Frontender && e.Backender); 
// 2. Все ли front? 
let areAllFront = data.every(e => e.Frontender); 
// 3. Выборка по компании 
let aaaEmployers = data.filter(e => e.company === 'aaa'); 
// 4. У всех заполнена company 
let areAllCompanyFilled = data.every(e => e.company); 
console.log( 
  hasFullstack,  
  areAllFront,  
  aaaEmployers.map(e => e.name),  
  areAllCompanyFilled)

Answer 2

Вероятно вам поможет функция поиска в массиве, вот.

function search(array) {
  for (var i = 0; i < array.length; i++) {
      for(key in array[i]) {
          if(array[i].Backender == "true" and array[i].Frontender == "true") {
              return "FullStack";
          }
      }
  }
  return -1;
}

По подобному алгоритму, можно решить все ваши задачи, просто добавьте проверку например на есть ли у компании «ааа» если есть, упускаем return, если нет возвращаемые false. По вашей просьбе могу уточнить ответ.

UPD:

function search(array, key, value) {
  for (var i = 0; i < array.length; i++) {
      if(array[i].key != value) {
          return false;
      }
  }
  return true,
}

search(тут указываем массив, тут указываем какое свойство надо проверять, тут какие у свойства должны быть значения);

Например

 search(array, "company", "aaa");

Если у всех работающих компания будет "aaa" вернёт true В противном случае false.

READ ALSO
Как исправить формулу расчета очков за прогноз?

Как исправить формулу расчета очков за прогноз?

Имеется форма для ввода данных:

233
Хранение в массиве переменных

Хранение в массиве переменных

Могу ли я хранить в games для каждой игры свои переменные со значениями id_game и href_game?

227
Как выполнить POST запрос на бэке?

Как выполнить POST запрос на бэке?

Как выполнить POST запрос на бэке на другой бэк и получить response? (аналог fetch на фронте)

207