lodash, _.find, v3 -> v4 巨坑一个
发布于 9 年前 作者 magicdawn 8641 次浏览 最后一次编辑是 8 年前 来自 分享

_.find in lodash@3.x

在3.x 版本里是

const arr = [
  { id:1 , name: ''foo },
  { id: 2, name: 'bar' }
];

const o = _.find(arr, 'id', 1);
console.log(o.name); // foo

_.find in lodash@4.x

在4.x 版本里是

const arr = [
  { id:1 , name: ''foo },
  { id: 2, name: 'bar' }
];

const o = _.find(arr, ['id', 1]);
console.log(o.name); // foo

conclusion

就是说你不修改代码,直接升级v4的话,之前 _.find(arr, 'id', 1) 在v4中会被当作 _.find(arr, 'id') 来处理,最后一个参数被丢弃,即之前是使用 _.matchProperty, 后面同样的代码是 _.property.

  • 没事别乱升级
  • 升级一定要刷 changelog & migration guide

以上。

17 回复

v4改了很多API,至今不敢升级。之前还吐槽过一些大神的项目用v2,现在了解他们的心情了

看到这个问题我直接哭了。。。。我之前每次用 _.find 都是 _find(fn),用来做相等条件查找。。。。现在看了你这种写法我才意识到我之前写了多少屎。。。

表示跳入下面这个大坑啦。

trimRight -> trimEnd
trimLeft  -> trimStart 

v4 改动不是一点点 pluck没了 现在直接用map

看来升v4还是比较有风险 自豪地采用 CNodeJS ionic

今天下午看到鲁大师版本到4.7了,比node刷得还快

@plusmancn 哈哈改名字还好点,全部替换既可。这个特么改参数。。。

@klausgao

2.x 貌似被deprecated, 会有提示吧~

@alsotang 不会出错哈哈~有了 arrow funtion 应该也挺方便了

=.= 直接fn 也挺好…

毕竟是主版本号升级,肯定不是向前兼容的,你跨主版本升级依赖包,你肯定要想一下兼容性。这肯定怪不得 lodash。

项目中用的3.x,没办法升级。。。

@wangchi 3.9吧~没有特别需求的话,可以用着v3

用的浅,只把contains改成includes就升级成功了。

@Axighi 有些不报错的会导致非常难找的bug。。。

身先士卒!

回到顶部