Найти, соответствует ли какой-либо элемент в массиве условию - PullRequest
0 голосов
/ 03 октября 2018

Я новичок в Javascript.Теперь здесь у меня есть массив, который имеет несколько объектов.Итак, я хочу повторить его, и если какой-либо объект соответствует условию, тогда я хочу вернуть значение и остановить этот цикл.

Мой массив obj такой, как

var obj =  [ { type: "", numberOfQuestions:"",  technology:"" }, { type: "1", numberOfQuestions:"4",  technology:"abcd" }, { type: "", numberOfQuestions:"6",  technology:"ass" } ]

И мое условие таково:

     validateData(data) {
            data.High.map((object) => {
              if((object.type === "") || (object.numberOfQuestions === "") || (object.technology === "")) {
                    return true;
              } else {
                  return false;
              } 
            });
        } 

Итак, я хочу, чтобы любой объект, имеющий несколько ключей, имел пустое значение для любого ключа, т.е. "" Затем я хочу вернуть истинное значение так,что я могу делать другие вещи.Как я могу это сделать?

Может кто-нибудь, пожалуйста, помогите мне.

Ответы [ 6 ]

0 голосов
/ 07 марта 2019

Для этого можно использовать функцию фильтра, которая возвращает массив при условии

 var container =  [ { type: "", numberOfQuestions:"",  technology:"" }, { type: "1", numberOfQuestions:"4",  technology:"abcd" }, { type: "", numberOfQuestions:"6",  technology:"ass" } ]

    container.filter((a)=>{ return a['type'] == "" ? a : a['numberOfQuestions'] == "" ? a : a['technology'] == "" ? a : '' }).length > 0 ? true : false;
0 голосов
/ 03 октября 2018

Это будет работать независимо от имен ключей (с использованием синтаксиса es6).

var data =  [ { type: "", numberOfQuestions:"",  technology:"" }, { type: "1", numberOfQuestions:"4",  technology:"abcd" }, { type: "", numberOfQuestions:"6",  technology:"ass" } ]

const checkNull = (data) => data.some(item => Object.keys(item).some(key => item[key] == ''));

console.log(checkNull(data));
0 голосов
/ 03 октября 2018

Вы можете использовать фильтр

var obj =  [ { type: "", numberOfQuestions:"",  technology:"" }, { type: "1", numberOfQuestions:"4",  technology:"abcd" }, { type: "", numberOfQuestions:"6",  technology:"ass" } ]
obj.filter((a)=>{ return a['type'] == "" ? a : a['numberOfQuestions'] == "" ? a : a['technology'] == "" ? a : '' }).length > 0 ? true : false;
0 голосов
/ 03 октября 2018

Прежде всего, не используйте = в объекте, пожалуйста, используйте :.Если вы хотите проверить ключи динамически, используйте этот код

    const validateData = (data) => {
          data.map((object) => {
        Object.keys(object).map((innerObj) => {
        if(object[innerObj] === "") {
                  return true;
            } else {
                return false;
            } 

        })

          });
        } 

        var obj =  [{ type: "", numberOfQuestions:"",  technology:"" }, 
{ type: "1", numberOfQuestions:"4",  technology:"abcd" }, 
{ type: "", numberOfQuestions:"6",  technology:"ass" }];

        validateData(obj);
0 голосов
/ 03 октября 2018

использовать массив reduce

    obj =  [ { type: "", numberOfQuestions:"",  technology:"" }, { type: "1", numberOfQuestions:"4",  technology:"abcd" }, { type: "", numberOfQuestions:"6",  technology:"ass" } ];
    
    obj = obj.find(function(item){ if (!(item.type === '' || item.numberOfQuestions === '' || item.technology === '')){ return item; } });
    
    console.log('array : ', obj);
0 голосов
/ 03 октября 2018

Вы можете использовать Array.prototype.some

var array = [...];

function validateData (array) {
  return array.some(item => item.type === '' || item.numberOfQuestions === '' || item.technology === '');
}

validateData(array);

Это было решение ES6 (с функциями стрелок).

Решение ES5:

function validateData (array) {
  return array.some(function(item) { 
    return item.type === '' || item.numberOfQuestions === '' || item.technology === '';
  });
}
...