javascript - Array.every 函数并未在 Object 的所有元素上运行

标签 javascript ecmascript-6 ecmascript-5 ecmascript-2017

我正在尝试使用以下代码在 temp1 内搜索是否有任何具有字符串“processado”

let temp1 = [{
    "id":7089,
    "value":"R$ 50,00",
    "name":"Daiany Nascimento",
    "date":"18/03/2019",
    "type":"Cobrança",
    "status":{
        "status":"Paga",
        "icon":"paid"
    },
    "credit_release_date":"Não Processado",
    "credit_release_description":"— — — —"
}]

let b = []

temp1.forEach((a,index_a) => { 
Object.values(a).every((value,index,array) => {
    let expression = new RegExp("processado", "i") //expression to search
    if (typeof value == "object") {
      Object.values(value).every(valueOfObject => {    
        if (expression.test(valueOfObject)) {
          b.push(temp1[index_a])
          return false;
        } else {
          return true
        }
      })
    }
    else if (expression.test(value)){ 
      b.push(temp1[index_a])
      return false
    }
      else {
      return true
    }
  })
})

但是,数组 b 仍然为空。如果我尝试搜索字符串“Cobrança”,数组 b 就会被填充,正如它应该的那样。我认为,如果我尝试搜索存储在状态键之后上的,则会出现错误.

最佳答案

您需要在 if (typeof value == "object")返回 Object.values(value).every(valueOfObject....

let temp1 = [{"id":7089,"value":"R$ 50,00","name":"Daiany Nascimento","date":"18/03/2019","type":"Cobrança","status":{"status":"Paga","icon":"paid"},"credit_release_date":"Não Processado","credit_release_description":"— — — —"}]

let b = []

temp1.forEach((a,index_a) => { 
Object.values(a).every((value,index,array) => {
    let expression = new RegExp("processado", "i") //expression to search
    if (typeof value == "object") {
      return Object.values(value).every(valueOfObject => {    
        if (expression.test(valueOfObject)) {
          b.push(temp1[index_a])
          return false;
        } else {
          return true
        }
      })
    }
      else if (expression.test(value)){ 
      b.push(temp1[index_a])
      return false
      }
      else {
      return true
      }
  })
})
console.log(b)

更简单、更清晰的方法是使用递归和 filter()some()every() 对我来说没有任何意义

let temp1 = [{"id":7089,"value":"R$ 50,00","name":"Daiany Nascimento","date":"18/03/2019","type":"Cobrança","status":{"status":"Paga","icon":"paid"},"credit_release_date":"Não Processado","credit_release_description":"— — — —"}]

function check(obj,regex){
  return Object.values(obj).some(x =>{
      let y;
      if(typeof x === "object") y = check(x,regex);
      return y || regex.test(x);
   });
}

let b = temp1.filter(x => check(x,/Processado/i))
console.log(b)

关于javascript - Array.every 函数并未在 Object 的所有元素上运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55232308/

相关文章:

javascript - 使用ajax滚动div不起作用

javascript - asp.net 中的 HTML 标记注入(inject)

javascript - 函数调用的父函数是否像分组运算符一样?

javascript - React 无状态组件中 'const' 变量的顺序

javascript - 如何停止 Javascript forEach?

javascript - 为什么我收到错误 "tf.fromPixels is not a function"?

javascript - 为什么在 Javascript 中使用闭包时,鼠标悬停事件不起作用?

javascript - 是否有可能获得 es6 类构造函数参数列表?

Javascript对象通过属性获取对象

javascript - 在 Chrome 中,JS 绑定(bind)函数具有 null arguments.callee.caller