lodash: определите, имеет ли json определенные поля больше 1 элемента или нет - PullRequest
0 голосов
/ 09 июля 2019

У меня есть JSON в формате ниже. Я пытаюсь пройтись по каждому объекту json и проверить параметры предмета и спорта. Я должен вернуть истину, если ни один из объектов не имеет более одного предмета или одного вида спорта. Если хотя бы один объект имеет хотя бы одно свойство (предмет или спорт) более чем на 1 предмет, тогда я должен вернуть false

[
  {
    "id": "1",
    "name": "peter",
    "subject": [
      {
        "id": "1",
        "name": "maths"
      },
      {
        "id": "2",
        "name": "social"
      }
    ],
    "sport": [
      {
        "id": "1",
        "name": "football"
      }
    ]
  },
  {
    "id": "2",
    "name": "david",
    "subject": [
      {
        "id": "2",
        "name": "physics"
      },
      {
        "id": "3",
        "name": "science"
      }
    ],
    "sport": [
      {
        "id": "2",
        "name": "soccer"
      }
    ]
  },
  {
    "id": "3",
    "name": "Justin",
    "subject": [
    ],
,
    "sport": [
    ]
  }
]

Я пытался описанным ниже способом, но это возвращает true, даже если у одного объекта нет объекта или вида спорта

if(find(this.gridData, function(o) { return o.subject.length <= 1; }) && 
   find(this.gridData, function(o) { return o.sport.length <= 1; })  
  ){
    return true;
}
else{
  return false;
}

1 Ответ

0 голосов
/ 09 июля 2019

Используйте Array.every() или lodash _.every(), чтобы проверить, соответствует ли длина свойств критериям.Когда предикат вернет false, цикл every завершится и вернется false.

const arr = [{"id":"1","name":"peter","subject":[{"id":"1","name":"maths"},{"id":"2","name":"social"}],"sport":[{"id":"1","name":"football"}]},{"id":"2","name":"david","subject":[{"id":"2","name":"physics"},{"id":"3","name":"science"}],"sport":[{"id":"2","name":"soccer"}]},{"id":"3","name":"Justin","subject":[],"sport":[]}]

const result = arr.every(({ subject, sport }) =>
  subject.length <= 1 && sport.length <= 1
)

console.log(result)
...