检查两个数组是否包含相同的对象 - 反应componentDidUpdate

pet*_*gan 5 javascript ecmascript-6 reactjs

我正在使用React的componentDidUpdate生命周期方法.

我试图确定两个数组是否相同.

我的prevState数组看起来像这样:

prevState.players = [
  {
    name: 'Wayne Rooney',
    age: 31
  }, 
  {
    name: 'Lionel Messi',
    age: 29
  },
  {
    name: 'Robbie Fowler',
    age: 42
  }
];
Run Code Online (Sandbox Code Playgroud)

并且this.state数组看起来像这样:

this.state.players = [
  {
    name: 'Wayne Rooney',
    age: 31
  }, 
  {
    name: 'Lionel Messi',
    age: 29
  },
  {
    name: 'Robbie Fowler',
    age: 42
  }
];
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,如果您展开下面的代码段,它们就不相同:

let playersOne = [{
    name: 'Wayne Rooney',
    age: 31
  },
  {
    name: 'Lionel Messi',
    age: 29
  },
  {
    name: 'Robbie Fowler',
    age: 42
  }
];

let playersTwo = [{
    name: 'Wayne Rooney',
    age: 31
  },
  {
    name: 'Lionel Messi',
    age: 29
  },
  {
    name: 'Robbie Fowler',
    age: 42
  }
];

console.log(playersOne == playersTwo)
Run Code Online (Sandbox Code Playgroud)

这是我的反应生命周期代码.

  componentDidUpdate(prevProps, prevState) {
    if(prevState.players != this.state.players) {
      this.updatePlayers(this.state);
    }
  }
Run Code Online (Sandbox Code Playgroud)

任何人都可以建议最好的方法来确定阵列是否相等?

Aka*_*han 16

JSON.stringify(playersOne) == JSON.stringify(playersTwo)

  • 哈哈哈哈我喜欢这个 (6认同)
  • 如果您的对象包含循环引用,这将适得其反。JSON.stringify() 方法将无法正常工作。 (3认同)

Bsa*_*lex 5

  1. 使用 lodash 中的 _.isEqual;
  2. 使用 JSON.stringify 并比较字符串;


归档时间:

查看次数:

10224 次

最近记录:

7 年,7 月 前