【问题标题】:Object entries returning undefined返回未定义的对象条目
【发布时间】:2019-07-15 19:56:06
【问题描述】:

我有一个从 SQL 查询返回的 json 对象。我想在发送回前端之前过滤掉 json 键。如果key为真,返回前端就是我要找的。​​p>

在我的服务器文件中有这一行。

          let returned_data = Object.entries(queried_data[0]).forEach((key, value) => {
            return value === true ? key : null
          })
          res.json(returned_data)

这是我在 SQL 查询后返回的 json 示例。

[{first_name: 'testing', has_apple: true, has_pear: true, has_beans: false}]

我期待returned_data 拥有['has_apple', 'has_pear']。现在我对 returned_data 越来越不确定了

【问题讨论】:

  • Object.entries() 永远不会返回 undefinedforEach 总是这样。
  • 您确定在与Object 交互之前不需要对queried_data 执行JSON 操作吗?
  • @theaccordance 你说得对,我可以从console.log 中看到一些不正确的地方,从forEach 更改为map 后,我得到了一个混乱的输出。我需要看看我需要执行哪个 JSON 操作。
  • 试试 JSON.parse()
  • 我已经开始工作了。谢谢

标签: javascript json object


【解决方案1】:

forEach 不会返回任何东西 map 会。此外Object.entries 返回一个数组数组,因此您需要解构 map 函数中的值以获取键和值。将您的代码更改为

      let returned_data = Object.entries(queried_data[0]).map(([key, value]) => {
        return value === true ? key : null
      })
      res.json(returned_data)

【讨论】:

  • 谢谢。我得到了回报。
【解决方案2】:

正如其他答案所说,forEach() 不会返回任何内容,因此您必须使用 map() 或创建一个数组并将值推送给它(如果为真)

var new_data=[];
Object.entries(queried_data[0]).forEach((key, value) => {
       if( value===true){new_data.push(key)}
});
console.log(new_data);

【讨论】:

  • 这正是我想要的结果。我也会尝试其他人的解决方案以获取知识。谢谢。
【解决方案3】:

我想你正在寻找

const returned_data = Object.entries(queried_data[0]).map((key, value) => {
    return value === true ? key : null
}).filter(key => {
    return key !== null
});

或者干脆

const returned_data = Object.keys(queried_data[0]).filter(key, queried_data[0][key] === true);

不要使用forEach

【讨论】:

    猜你喜欢
    • 2017-07-11
    • 1970-01-01
    • 1970-01-01
    • 2016-01-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多