найти и получить массив объектов, который соответствует значению (ES6) - PullRequest
0 голосов
/ 20 сентября 2019

Ниже приведен пример некоторых из моих массивов obj, которые я получаю в своем ответе json:

0: {day: "7", starting_time: "0800", closing_time: "1600"}
1: {day: "1", starting_time: "0600", closing_time: "1600"}
2: {day: "2", starting_time: "0600", closing_time: "1600"}
3:
closing_time: "1600"
day: "3"
starting_time: "0600"
__proto__: Object

Я получаю значение текущего дня недели со следующим:

  var d = new Date();
  var dayOfWeek = d.getDay();
  var hour = d.getHours();

Я просто пытаюсь использовать значение dayOfWeek, которое получаю выше (то есть сегодня оно 5), и использовать его для получения массива obj 5: из моего json, чтобы получить это ( this) дней рабочего времени с момента ответа json.

Ниже я недавно попробовал.

  function matchingDay(hoursoperations) {
    return hoursoperations === dayOfWeek;
  }
  console.log(myJson.bla.findIndex(matchingDay));

, но получаю ошибку:

index.js:45 Uncaught (in promise) TypeError: myJson.bla.findIndex not a function

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

document.addEventListener('DOMContentLoaded', () => { 
  loadSVGs();
  fetch('https://www.website.com/obfuscate-json/obfuscate/v3/options/obfuscate')
  .then(function(response) {
    return response.json();
  })
  .then(function(myJson) {
  // ....  code ... 

Ответы [ 2 ]

1 голос
/ 20 сентября 2019

Ваша функция хороша только тем, что myJson.bla - это не массив, а объект с ключами '0', '1' ... если вас не волнуют эти индексы

function matchingDay(hoursoperations) {
  return hoursoperations === dayOfWeek;
}
console.log(Object.values(myJson.bla).findIndex(matchingDay));

Выможет дополнительно изменить ваш метод для сравнения с атрибутом day

function matchingDay(row) {
  return +row.day === dayOfWeek;
}
console.log(Object.values(myJson.bla).findIndex(matchingDay));
0 голосов
/ 20 сентября 2019

Хорошо, значит, ваш вопрос не совсем понятен, но имеет смысл использовать метод Array.prototype.find().например:

  var d = new Date();
  var dayOfWeek = d.getDay();
  var hour = d.getHours();

// now finding the object with the exact day of the week.
  jsonResponse.find(obj => dayOfWeek+1 == obj.day);

метод .find() возвращает элемент в массиве, как только переданное условие оценивается как true.

также, дни недели в javascript начинаются с 0-6таким образом, чтобы получить соответствующий день недели, вы должны увеличить день недели на 1.

...