Все верно (средний Javascript алгоритм) - PullRequest
0 голосов
/ 24 апреля 2020

Вопрос

Проверьте, верен ли предикат (второй аргумент) для всех элементов коллекции (первый аргумент).

Другими словами, вам дают коллекция массивов объектов. Предикат pre будет свойством объекта, и вам нужно вернуть true, если его значение истинно. В противном случае верните false.

В JavaScript истинные значения - это значения, которые преобразуются в true при оценке в логическом контексте.

Помните, что к свойствам объекта можно обращаться через точечную запись или [ ] нотации.

Что я пробовал

function truthCheck(collection, pre) {
  
  let count = 0;

    for(let x of collection){

      for(let i = 0; i < x.length; i++){

        if(x[i].hasOwnProperty(pre)){
        count++
        };

      }
    }
      if(count == collection.length){
      return true;
      }
      return false;
      }

truthCheck([{"user": "Tinky-Winky", "sex": "male"}, {"user": "Dipsy", "sex": "male"}, {"user": "Laa-Laa", "sex": "female"}, {"user": "Po", "sex": "female"}], "sex");

Мой запрос

  1. Пожалуйста, исправьте мой код.
  2. Пожалуйста, предоставьте оптимальное решение, или "как бы ты это сделал"

Очень ценится.

Ответы [ 3 ]

2 голосов
/ 24 апреля 2020

Итак, я черпал вдохновение из сообщения Евгения. Нам нужно go сделать шаг вперед и проверить достоверность каждого значения, а не только если ключ существует.

const arr = [{
  "user": "Tinky-Winky",
  "sex": "male"
}, {
  "user": "Dipsy",
  "sex": "male"
}];

const arr2 = [{
  "user": "Laa-Laa",
  "sex": 1
}, {
  "user": "Po",
  "sex": undefined,
}];

const arg = 'sex';

const result = arr.every(item => Object.keys(item).every(value => item[value]))
console.log(result)

const result2 = arr2.every(item => Object.keys(item).every(value => item[value]))
console.log(result2)
1 голос
/ 24 апреля 2020

Вот реализация, если вы хотите проверить, присутствует ли ключ в каждом объекте (ваш второй аргумент):

const arr = [{
  "user": "Tinky-Winky",
  "sex": "male"
}, {
  "user": "Dipsy",
  "sex": "male"
}, {
  "user": "Laa-Laa",
  "sex": "female"
}, {
  "user": "Po",
  "sex": "female"
}];

const arg = 'sex';


const result = arr.every(x => Object.keys(x).includes(arg))
console.log(result)

Ваша функция будет выглядеть следующим образом:

const truthCheck= (arr,arg) => arr.every(x => Object.keys(x).includes(arg))
0 голосов
/ 24 апреля 2020

Я сделаю это так:

function truthCheck(collection, pre) {
  return collection.every(item => item.hasOwnProperty(pre));
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...