在数组中创建对象的副本

3

我正在运行React Native的示例应用程序。我有一个包含对象列表的样本数组,即[a,b,c,d,e]。我在数组中创建了a对象的副本,它创建了a对象的副本,并且我在数组中创建了另一个对象副本,但它被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
根据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)
      })
    }

嗨,@Karthikeyan,感谢您的回复...................... var finalArray = JSON.parse(JSON.stringify(index)); 这也替换了对象。 - Harika
它替换了哪个对象?请提供更多细节。finalArray是一个新的对象数组,从字符串解析而来。因此,如果您对finalArray进行任何修改,那么不会改变索引。 - Karthikeyan
嗨,@Karthikeyan.....我找到了解决方案.............将**var duplication = []**声明为全局数组。 - Harika

-1

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

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接