React Native中的唯一对象数组

时间:2018-10-25 19:54:26

标签: react-native

有一种方法可以将对象ID的对象数组存储为键,将答案的值存储为值。

但是由于保存了对象的先前状态,因此正在创建多个具有相同问题ID的对象。

handleSelect(questionId,index,value){
        this.setState((oldState)=>({selectedOptions:[...oldState.selectedOptions,{question:questionId,answer:value}]}))
    }

如何创建对象的唯一数组?

2 个答案:

答案 0 :(得分:1)

您可以通过多种方式实现这一目标-一种方式是像这样使用Array#reduce()方法:

handleSelect(questionId,index,value) {

    // Your array containing items with duplicate questions
    const arrayWithDuplicates = [ 
      ...this.state.selectedOptions,
      { question:questionId,answer:value }
    ];

    // Use reduce to create an array of items with unique questions
    const selectedOptions = arrayWithDuplicates
    .reduce((uniqueArray, item) => {

      const isItemInUniqueArray = uniqueArray.find(uniqueItem => {
          return uniqueItem.question === item.question; 
      });

      if(!isItemInUniqueArray) {
          uniqueArray.push(item);
      }

      return uniqueArray

    }, [])

    this.setState((oldState)=>({selectedOptions: selectedOptions}))
}

答案 1 :(得分:1)

此线程现在关闭。我为我的问题找到了解决方案。

handleSelect(questionId,index,value) {
                  let question = this.state.selectedOptions.find((questions) => {
                      return questions.question === questionId
                  });
                    if(question){
                      this.setState(prevState => ({
                      selectedOptions: prevState.selectedOptions.map(
                      obj => (obj.question === questionId ? Object.assign(obj, { answer: value }) : obj)
                    )
                    }));
                    }
                    else{
                      this.setState((oldState)=>({selectedOptions:[...oldState.selectedOptions,{question:questionId,answer:value}]}))
                    }
              }