получить индекс из объекта JSON со значением в postman/newman

Я пытаюсь получить индекс, передав ссылку на значение.

У меня есть некоторые параметры javascript, но все эти функции показывают is not a function

Получение ошибки, как показано ниже:

TypeError | jsonData.getIndexOf is not a function

Я пробовал варианты, упомянутые в ссылке ниже:

получить индекс из объекта JSON со значением

Пример:

var jsonData = JSON.parse(responseBody);

Array.prototype.getIndexOf = function(el) {

  var arr = this;

  for (var i=0; i<arr.length; i++){
     console.log(arr[i].name);
     if(arr[i].name==el){
       return i;
     }

  }

  return -1;

}

console.log(jsonData.getIndexOf("Volume"));

Скриншот объекта:

введите здесь описание изображения

Возможно ли это в почтальоне/ньюмене


person Shubham Jain    schedule 22.11.2017    source источник
comment
Вы можете опубликовать некоторые из ваших данных из responseBody, над которыми вы работаете?   -  person Kresimir Pendic    schedule 22.11.2017
comment
Каков результат console.log(jsonData instanceof Array)?   -  person Quentin    schedule 22.11.2017
comment
Я не могу опубликовать свой ответ по правилам. Но этот JSON огромен с таким количеством ключей и вложенных массивов и т. д.   -  person Shubham Jain    schedule 22.11.2017
comment
Объекты JSON, скорее всего, будут иметь буквенно-цифровые ключи и будут преобразованы в объекты вместо массивов. Возможно, вам также потребуется расширить прототип объекта.   -  person Kaddath    schedule 22.11.2017
comment
@ShubhamJain — Но этот JSON огромен — вот почему вам нужно создать минимальный воспроизводимый пример   -  person Quentin    schedule 22.11.2017
comment
@Kaddath — текст JSON в связанном вопросе имеет массив в качестве внешнего типа данных.   -  person Quentin    schedule 22.11.2017
comment
@Quentin - я создал фиктивные данные и разместил их по этому URL-адресу:   -  person Shubham Jain    schedule 22.11.2017
comment
Теперь предположим, что мне нужен индекс из значения как Sharpe Oneal. Любое решение будет полезно   -  person Shubham Jain    schedule 22.11.2017
comment
@ShubhamJain — не создавайте фиктивные данные. Вам нужно создать минимально воспроизводимый пример. Тот, который на самом деле демонстрирует проблему. Ваш код не выдает никаких ошибок с этими данными: jsfiddle.net/hxLj7c83   -  person Quentin    schedule 22.11.2017
comment
на самом деле ваш код отлично работает здесь с образцом внешней ссылки, которую вы разместили (3 первые строки). Вот почему JSON должен быть здесь, мы должны иметь возможность проверить, что он на самом деле не работает с тем, что вы предоставили, чтобы увидеть, не возникает ли ошибка из чего-то другого.   -  person Kaddath    schedule 22.11.2017
comment
Да, я видел URL-адрес jsfiddle, и он возвращает мне -1 со значением, присутствующим в JSON (это все еще неправильно), но да, это не ошибка, поскольку я получаю в разделе «Тесты почтальона». выглядит интересно.   -  person Shubham Jain    schedule 22.11.2017
comment
Но я по-прежнему считаю, что вы должны расширять объект вместо массива, поскольку массив является объектом, он будет работать во всех случаях (и использовать for...in, потому что объект не имеет длины)   -  person Kaddath    schedule 22.11.2017
comment
@Kaddath — функция ожидает, что вызываемый ею объект будет иметь свойство length (которое будет иметь массив). Не имеет особого смысла наклеивать его на все виды объектов.   -  person Quentin    schedule 22.11.2017
comment
@Kaddath - это не работает .. Я добавил снимок экрана о том же   -  person Shubham Jain    schedule 22.11.2017
comment
@ShubhamJain, если вы получаете ту же ошибку, хотя переменная, очевидно, также является объектом, она может исходить из вашей среды. Я не знаю, почтальон, ты уверен, что это позволяет расширять прототипы?   -  person Kaddath    schedule 22.11.2017
comment
Да, возможно, поскольку почтальон не позволяет даже другому модулю попасть в него.. хм.. Кстати, спасибо всем за попытку   -  person Shubham Jain    schedule 22.11.2017


Ответы (1)


Я успешно использовал этот обновленный код:

var jsonData = JSON.parse(responseBody);

//I would use an Object prototype here, because jsonData is an object
Object.prototype.getIndexOf = function(el) {
  var arr = this;
  
  for (var i=0; i<arr.length; i++){
      //when you're checking to see if a key exists, it is better to use the "in" operator
     if(el in arr[i]){
       return i;
     }
  }

  return -1;
}

//make sure the case matches
console.log(jsonData.getIndexOf("Volume"));

person Ed Meacham    schedule 15.12.2017