【问题标题】:find and get object array that matches value (ES6)查找并获取与值匹配的对象数组(ES6)
【发布时间】:2020-01-21 20:11:47
【问题描述】:

以下是我在 json 响应中得到的一些 obj 数组的示例:

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)-并使用它从我的json 中获取数组obj 5: 来获取它(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

更多上下文,数据来自 fetch 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 ... 

【问题讨论】:

  • 方法 xxxx 在哪里 promise?你能用小提琴复制这个吗?
  • 我已经添加了该信息并对其进行了模糊处理
  • 好吧,myJson 似乎不是一个数组,而是一个对象
  • 它是一个对象数组

标签: javascript arrays json ecmascript-6 ecmascript-5


【解决方案1】:

你的函数很好,只是 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));

【讨论】:

  • 谢谢,所以没有错误,但是它在控制台中打印 -1 - 而不是得到 5
  • 修改你的方法以根据对象天的属性计算,开始/关闭时间
【解决方案2】:

好的,所以您的问题并不完全清楚,但是使用 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() 方法将返回数组中的一个元素。

此外,javascript 中的星期几从 0-6 开始,因此要获得匹配的星期几,您必须将星期几增加 1。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-11-27
    • 2019-08-08
    • 1970-01-01
    • 1970-01-01
    • 2013-09-16
    • 1970-01-01
    • 2020-06-20
    • 1970-01-01
    相关资源
    最近更新 更多