如何基于JavaScript对象有条件地输出数据?

时间:2019-01-23 04:00:35

标签: javascript reactjs

有帮助吗? 假设我有这个对象数组。

const data = {
post: [
  {
  id: 1,
  name: "lorem A",
  lastseen: 1,
  },
  {
  id: 2,
  name: "lorem B",
  lastseen: 16,
  },
  {
  id: 3,
  name: "lorem C",
  lastseen: 3,
  },
  {
  id: 4,
  name: "lorem D",
  lastseen: 10,
  },
]`}

我正在使用简单的反应时间组件来显示“ hr”或“ hrs”。 如何检查“ data.lastseen”值是否大于1? 这样我就可以像这样显示“ 1 hr”或“ 2 hrs”

我知道要对此进行映射,但是有条件地向遇到问题的每个对象添加并显示“ hr”或“ hrs”。

const mapData = data.map((seen) => seen.lastseen)

我用Google搜索它来从Object中提取值,我们可以使用“ Object.values()” 但不确定如何与地图结合。

更新的代码 这是我的反应成分

<Main>
{Request.data.post.map((user) => {
    return (
      <Col
      //I'm display other component here 
        <User user={user} />
      //I'm display other component here 
       </Col>
    );
})}

 const User = ({ user }) => {
  return (
    <Col>
      <Seen user={user} />
    </Col>
  );
};


const Seen = ({ user }) => {
  return <React.Fragment> {user.map((seen) =>
        seen.lastseen == 1 ? seen.lastseen + "hr" : seen.lastseen + "hrs"
      )}</React.Fragment>;
};

5 个答案:

答案 0 :(得分:4)

由于无法在jsx中使用else,因此请使用如下三元运算符:

const mapData = data.map(seen => (seen.lastseen == 1 ? 'hr': 'hrs'));

答案 1 :(得分:0)

for(var i=0; i<data.length; i++) {
    if(data[i].lastseen === 1) {
        // display 1 + 'hr'
    } else if(data[i].lastseen > 1) {
        //diplay data[i].lastseen + 'hrs'
    }
}

答案 2 :(得分:0)

这是我的解决方法:

import React from "react";

class App extends React.Component {
  render() {
    const data = [
      {
        id: 1,
        name: "lorem A",
        lastseen: 1
      },
      {
        id: 2,
        name: "lorem B",
        lastseen: 16
      },
      {
        id: 3,
        name: "lorem C",
        lastseen: 3
      },
      {
        id: 4,
        name: "lorem D",
        lastseen: 10
      }
    ];
    return (
      <div>
        {data.map(item => {
          return item.lastseen === 1 ? (
            <p key={item.id}>{item.lastseen}hr</p>
          ) : (
            <p key={item.id}>{item.lastseen}hrs</p>
          );
        })}
      </div>
    );
  }
}

export default App;

答案 3 :(得分:0)

现在,我想通了,谢谢您的帮助。

我将看到的组件更新为

const seen = ({ user }) => {
  return (
    <React.Fragment>
      {user.lastseen == 1 ? user.lastseen + "hr" : user.lastseen + "hrs"}
    </React.Fragment>
  );
};

我的错误我以为“用户”仍然是一个数组,而不是一个对象。 这就是为什么我不断收到错误“ TypeError:user.map不是函数”的原因

答案 4 :(得分:0)

从上面的代码

const Seen = ({ user }) => {
  return <React.Fragment> {user.map((seen) =>
        seen.lastseen == 1 ? seen.lastseen + "hr" : seen.lastseen + "hrs"
      )}</React.Fragment>;
};

会抛出错误

  

TypeError:user.map不是函数

由于user是一个对象,您可以使用Object.keys并在其上进行映射。因此,更改您的代码

const Seen = ({ user }) => {
     return <React.Fragment> { Object.keys(user).map((key) => (key == 'lastseen' ? (user[key] == 1 ? user[key] + ' hr': user[key] +' hrs') : null)) } </React.Fragment>;
 };

它将正常工作。