CNode

lodash, _.find, v3 -> v4 巨坑一个

分享
Mmagicdawn发布于10 年前最后回复10 年前17 回复9498 浏览0 收藏

_.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)

K
klausgao#1·10 年前

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

A
alsotang#2·10 年前

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

P
plusmancn#3·10 年前

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

trimRight -> trimEnd
trimLeft  -> trimStart 
P
p412726700#4·10 年前

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

A
alsotang#5·10 年前

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

K
klausgao#6·10 年前

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

M
magicdawn#7·10 年前
引用 plusmancn表示跳入下面这个大坑啦。

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

H
HarryHong#10·10 年前

=.= 直接fn 也挺好....

J
JustinLiao1314#11·10 年前

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

W
wangchi#12·10 年前

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

M
magicdawn#13·10 年前
引用 wangchi项目中用的3.x,没办法升级。。。

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

A
Axighi#14·10 年前

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

M
magicdawn#15·10 年前
引用 Axighi用的浅,只把contains改成includes就升级成功了。

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

I
im-here#17·10 年前

mk

参与回复
登录后即可参与回复。登录