JS: TypeError: не удается найти функциональные клавиши в объекте - PullRequest
0 голосов
/ 04 марта 2019

У меня в скрипте приложений есть следующее:

function getQAs() {
    return [

      { "Do you have any pictures ?|1 ": {"yes":2,"no":3 } },
      { "Do you have any pictures ?|2 ": {"yes":2,"no":3 } },
      { "Do you have any pictures?|3 ": {"yes":2,"no":3 } },
    ]
}

Я пытаюсь создать функцию, которая будет искать по ключам объектов номер.Я тестирую с номером 1. Когда я запускаю:

function testQA() {
  var qa = getQAs();
  var matches = qa.keys().filter(function(row) { //ONLY CHECKED ROWS.
    Logger.log(row)
    return row.indexOf('1') == true;
  });

  Logger.log(matches);
}

, я получаю

JS: TypeError: Невозможно найти функциональные клавиши в объекте.Что я делаю не так?

Ответы [ 2 ]

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

Просто поиграюсь с вашим вопросом

Я не очень хорош с объектами, поэтому я подумал, что было бы интересно поиграть с этим и посмотреть, чему я могу научиться.Я не ожидал, что мой ответ будет выбран, я просто подумал, что он может оказаться полезным для менее опытного программиста, такого как я.

function getQAs() {
  var qa=[{"Do you have any picture?|1":{yes:"2",no:"3"}},{"Do you have any picture?|2":{yes:"4",no:"5"}},{"Do you have any picture?|3":{yes:"8",no:"9"}}];
  return qa;
}

function testQA(row) {
  var row=row || 3;
  var qa = getQAs();
  Logger.log(qa);
  var qA=[];
  for(var i=0;i<qa.length;i++) {
    qA.push(Object.keys(qa[i]));
  }
  Logger.log(qA);
  for(var i=0;i<qA.length;i++) {
    if(qA[i].toString().indexOf(row)>-1){
      var rv=JSON.stringify(qa[i]);
      var t1=qA[i];
      var t2=qa[i];
      var yeses=t2[t1].yes;
      var nos=t2[t1].no;
      var t3={yes:yeses,no:nos};
      return t3;
      break;
    }
  }
}      

Надеюсь, кто-то может чему-то научиться из этого, пройдя одну программу.Возвращает объект с номером yeses и noes для выбранного объекта.

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

Вам нужно использовать цикл for...in, чтобы получить ключи объекта.Я разработал простой цикл по ключам, чтобы определить, существует ли значение в ключе, а затем вытолкнул отфильтрованный массив

function testQA() {
  var qa = getQAs();

  function getRow(row_identifier) {
  var filtered = [];
    qa.forEach(function(v) {
      for(var k in v) {
       if(k.indexOf(row_identifier) > 0) filtered.push(v);
      }
    });
         return filtered;
  }

   return getRow(row_identifier);
}

function getQAs() {
  return [

    {
      "Do you have any pictures ?|1 ": {
        "yes": 2,
        "no": 3
      }
    },
    {
      "Do you have any pictures ?|2 ": {
        "yes": 2,
        "no": 3
      }
    },
    {
      "Do you have any pictures?|3 ": {
        "yes": 2,
        "no": 3
      }
    },
  ]
}

function testQA() {
  var qa = getQAs();

  function getRow(row_identifier) {
  var filtered = [];
    qa.forEach(function(v) {
      for(var k in v) {
       if(k.indexOf(row_identifier) > 0) filtered.push(v);
      }
    });
         return filtered;
  }
      console.log(getRow(1));
      console.log(getRow(2))
      console.log(getRow(3))
}
testQA();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...