Сравнение массива и объекта

299
31 июля 2017, 14:40

Нужно сравнить массив с необходимыми полями с ключами объекта, если совпадают true, иначе false.

const requiredFields = [ 'title', 'price', 'discount' ]; 
 
 
let form1 = { 
  title: 'Товар Телепорт бытовой VZHIH-101', 
  price: 7800, 
  discount: 0 
}; 
 
let form2 = { 
  title: 'Товар Телепорт бытовой VZHIH-101', 
  discount: 10 
} 
if ( isValidPosition(form1, requiredFields) ) { 
  console.log('Форма №1 заполнена верно'); 
} else { 
    console.log('В форме №1 не заполнены необходимые поля'); 
} 
if ( isValidPosition(form2, requiredFields) ) { 
  console.log('Форма №2 заполнена верно'); 
} else { 
  console.log('В форме №2 не заполнены необходимые поля'); 
} 
 
function isValidPosition(form, settings) { 
  let formKeys = Object.keys(form); 
  console.log(formKeys); 
  for (let i = 0; i < settings.length; i++) { 
    if (settings.indexOf(formKeys[i]) === -1) { 
      console.log('Форма заполнена не верно'); 
      return false; 
    } else { 
      console.log('Форма заполнена верно'); 
      return true; 
    } 
  } 
}

Answer 1

Можно через фильтр выделить все элементы, которых нет в объекте и если таких элементов нет, то выводить true.

// Функция проверки 
var isValid = function(obj, arr__properties) { 
  var arr__gap = arr__properties.filter(property => obj[property] === undefined); 
 
  return arr__gap.length === 0; 
}; 
 
// Данные 
var requiredFields = ['title', 'price', 'discount']; 
 
var form1 = { 
  title: 'Товар Телепорт бытовой VZHIH-101', 
  price: 7800, 
  discount: 0 
}; 
var form2 = { 
  title: 'Товар Телепорт бытовой VZHIH-101', 
  discount: 10 
} 
 
// Проверка 
if (isValid(form1, requiredFields)) { 
  console.log('Форма №1 заполнена верно'); 
} else { 
  console.log('В форме №1 не заполнены необходимые поля'); 
} 
if (isValid(form2, requiredFields)) { 
  console.log('Форма №2 заполнена верно'); 
} else { 
  console.log('В форме №2 не заполнены необходимые поля'); 
}

UPDATA:

По подсказке пользователя Grundy можно сделать более краткую проверку с помощью функции every.

// Функция проверки 
var isValid = function(obj, arr__properties) { 
  return arr__properties.every(property => obj[property] !== undefined); 
}; 
 
// Данные 
var requiredFields = ['title', 'price', 'discount']; 
 
var form1 = { 
  title: 'Товар Телепорт бытовой VZHIH-101', 
  price: 7800, 
  discount: 0 
}; 
var form2 = { 
  title: 'Товар Телепорт бытовой VZHIH-101', 
  discount: 10 
} 
 
// Проверка 
if (isValid(form1, requiredFields)) { 
  console.log('Форма №1 заполнена верно'); 
} else { 
  console.log('В форме №1 не заполнены необходимые поля'); 
} 
if (isValid(form2, requiredFields)) { 
  console.log('Форма №2 заполнена верно'); 
} else { 
  console.log('В форме №2 не заполнены необходимые поля'); 
}

READ ALSO
PHP, функция isset(), нюансы в определении

PHP, функция isset(), нюансы в определении

По мотивам заведенного бага (смвнизу секцию "comments")

272
Аналоги str_replace в php

Аналоги str_replace в php

Есть код, который ищет значения в одном массиве и изменяет значения строки взяв значения из другого массива? Можно ли как то объеденить данные...

322
Тернарный оператор классы laravel

Тернарный оператор классы laravel

Как использовать тернарный оператор с классами? Пытаюсь сделать вот так, не выходит:

364