【问题标题】:Show only the information of this date仅显示该日期的信息
【发布时间】:2020-07-10 17:37:55
【问题描述】:

我有 4 个人的 4 个日期,我想带上添加该日期的人的姓名,但是当我选择数组遍历 4 次的日期时,其中一个会带上姓名..说阵列可以旅行所有人,但不仅仅是我想要的人。 例如在第 17 天,当我选择它时 2 个警报出现错误,第三个带有人名,第四个警报错误.. 其他类似

View picture

代码是这个,感兴趣的函数是infoDay

 constructor(props) {
    super(props);

    this.state = {
      selected: "",
      usuarios: [],
    };
  }

  componentDidMount() {
    firebase
      .database()
      .ref("DatosCli/")
      .on("child_added", (data) => {
        var datos = data.val();
        /*  alert(JSON.stringify(datos));  */
        var usuariosTemp = this.state.usuarios;
        datos.key = data.key;
        //Alert.alert("prueba",""+datos.longitud)
        usuariosTemp.push(datos);
        this.setState({ usuarios: usuariosTemp });
      });
  }

  cargarDatos = async () => {
    var userTemp = new Array();
    var data = await firebase.database().ref("/DatosCli").once("value");

    data.forEach((child) => {
      var user = child.val();
      user.key = child.key;
      userTemp.push(user);
    });
    this.setState({ usuarios: userTemp });
  };



   render() {
    const markedDates = {};
    this.state.usuarios.forEach((usuarioTemp) => {
      markedDates[usuarioTemp.date] = {
        selected: true,
        disableTouchEvent: false,
        selectedColor: "orange",
        selectedTextColor: "red",
      };
    });

    const infoDay = (day) => {
      this.state.usuarios.forEach((usuarioTemp) => {
        if (day.dateString == usuarioTemp.date) {
          alert(usuarioTemp.nombre);
        } else {
          alert("fail");
        }
      });
    };
    return (
      <View style={styles.container}>
        <CalendarList markedDates={markedDates} onDayPress={infoDay} />
      </View>
    );
  }

【问题讨论】:

  • 你能维护一个地图,其中日期是一个键,所有的人都被添加到数组中并将其作为一个值存储在地图中它会像。 {"日期":["person1","person2"]} .
  • 写入控制台并查看值类型并比较 (day.dateString == usuarioTemp.date) console.log(day.dateString) console.log(usuarioTemp.date) 查看 console.log(天)太
  • 我得试试

标签: javascript reactjs react-native foreach


【解决方案1】:

如果您删除 else 语句,您只会看到正确的警报。

const infoDay = (day) => {
      this.state.usuarios.forEach((usuarioTemp) => {
        if (day.dateString == usuarioTemp.date) {
          alert(usuarioTemp.nombre);
        }
      });
    };

如果你想通过特定用户旅行,你必须用用户名制作一个字典

例如:

let usuarioTemp = {
    firstUser:{day: 17},
    secondUser:{day: 19}
}

你的功能可能是:

const infoDay = (day, userName) => {
     if(usuarioTemp[userName].date === day){
        alert(userName);
     }
};

最后,我想你得到的数据是这样的:

[{nombre:"Name", date:17}, {nombre:"Name2", date:19}]

你可以使用这个功能:

function groupBy(array, key) {
  let arrayReduced = array.reduce(
    (result, { [key]: k, ...rest }) => {
      (result[k] = rest);
      return result;
    },
    {}
  );
  return arrayReduced;
}

你会看到这样的数据:

{
"Name": {date: 17},
"Name2": {date: 19}
}

测试:

//Data example
let data = [{nombre:"Name", date:17}, {nombre:"Name2", date:19}]

//Function groupBy
function groupBy(array, key) {
  let arrayReduced = array.reduce(
    (result, { [key]: k, ...rest }) => {
      (result[k] = rest);
      return result;
    },
    {}
  );
  return arrayReduced;
}

//Usage
console.log(groupBy(data, "nombre"))

希望对你有帮助!

【讨论】:

  • 感谢您的帮助
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多