在数组中创建对象的重复

时间:2018-05-31 04:10:36

标签: javascript react-native

我正在使用react-native运行示例应用程序。我有一个包含对象列表的示例数组,即 [a,b,c,d,e] 。我在数组中创建了 object a 的重复项,它创建了 object a 的副本,我在数组中创建了另一个对象重复但是它被替换为对象重复。如何解决这个问题...请帮帮我。 这是我的代码:

export default class AllCategories_list extends Component {
  constructor(props) {
    super(props)
    this.state = {
      dataSource: new ListView.DataSource({ rowHasChanged: (r1, r2) => r1 !== r2 })
    }
  }
duplicate(index) {
    var duplication = []
    var duplicationObj = Object.assign({}, index) //Object.create(duplicateArray)

    duplication.push(duplicationObj)
    alert(JSON.stringify(duplication))
    var finalArray = array.concat(duplication)
    this.setState({
      dataSource: this.state.dataSource.cloneWithRows(finalArray)
    })
  }
rowData(list) {
    // alert(JSON.stringify(list))
    return (
      <View style={styles.listContainer}>
        <TouchableOpacity onPress={this.duplicate.bind(this, list)}>

          <Text style={styles.item}>{list}</Text>
        </TouchableOpacity>
      </View>
    )
  }
  render() {
    return (
      <View style={styles.container}>
        <ListView
          contentContainerStyle={styles.list}
          dataSource={this.state.dataSource}
          // horizontal={true}
          renderRow={this.rowData.bind(this)}
        />
      </View>
    )
  }
}

2 个答案:

答案 0 :(得分:0)

根据https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/assign,Object.assign不进行深度克隆,“对于深度克隆,我们需要使用其他替代方法,因为Object.assign()复制属性值。如果源值是对对象,它只复制那个参考值。“

如果您的对象是可序列化的,那么您可以这样做

    duplicate(index) {
      var finalArray = JSON.parse(JSON.stringify(index));
      this.setState({
        dataSource: this.state.dataSource.cloneWithRows(finalArray)
      })
    }

答案 1 :(得分:0)

我找到了解决方案.............

var duplication = [] 声明为全局数组.....它不会替换数组中的对象......