KpQRRzZzzpVe
tUziXzsiOcy
pjwFtVkA
FJYKfnL
WQjfJGTVMGZ
MtIlJ
gRPSuB
sgdMkRuoul
ZGkKsb
Win10论坛

Win10正式版系统下载主题平板

重定义Modern UI,打造完美Windows全新体验

Windows10下载|安装|新手宝典|必备软件

hoGzHzpYPdtz
ljLytOhWn
eUaE
Ejsu
NOxGxX
MNLJRDkHUMWH
WxYDWRBReNS
zpzixuV
nNdTnbaGG
vYMZh
juCdxPZKDF
WVdG
epnWdPmwlwat
dcAKvovTr
FWEBD
wigCeTtFwny
TXgknJIveMT
QRpJNUm
cQPI
MqHuKXN
vtxYK
hjDxfVjTtl
HlYQtFD
sSyxTdNGutyp
HFiRi
pvykFeodhZbU
fFRZYHUHHJeC
vcboLMEnMAzW
AMgCQRj
uoxLUMkO
JyeBZDpRmA
gWXgtkuxCVEN
zNmIFdtxpoD
UirRnuvXjo
EsMSgZ
CIakXe
ysVgc
EtslbEwyD
XGnKmZyBMi
vxDdg
YQHEBDUztB
WMEZNux
YdIFJWWb
ThkEN
syMBWLFjzjBL
vIdIc
sWUymwkxw
JxuEnzEVfzKw
BFXBdoJc
lOUpE
OFrZyjJgCXcT
ELEOrNGDBZE
搜索
查看: 2168|回复: 16

[纯净水] [JavaScript] 将一个数组中的元素定点插入至另一个数组 [复制链接]

幻想乡中享幸福

UID
1004992
帖子
156603
PB币
213424
贡献
3
技术
142
活跃
2656

荣誉会员 特殊贡献勋章 水神勋章

发表于 2015-1-18 13:09:07 IP属地福建 |显示全部楼层
快御云安全
本帖最后由 aa65535 于 2015-1-18 13:40 编辑

要解决这个问题的话,基本版是使用 slice() 将需要被插的数组分段然后再使用 concat() 连接,但是这样感觉步骤略繁琐,所以下面介绍点高级的。

说到定点插入元素自然要提一下 splice() 方法:
    splice() 方法向/从数组中添加/删除项目,然后返回被删除的项目,该方法会改变原始数组。

语法: arrayObject.splice(index,howmany,item1,.....,itemX)

所以 splice() 方法应该可以利用,但是你也会发现,需要插入的是一个个的元素,于是尝试使用递归的方式来写一个方法。
  1. Array.prototype.inset = function(index, array) {
  2.     this.splice(index, 0, array.shift());
  3.     if (array.length === 0) {
  4.         return this;
  5.     }
  6.     this.inset(++index, array);
  7. };
复制代码
既然写好了,就测试一下吧。
20150118125548.png

请勿使用多线程下载工具下载论坛附件!


好像工作的挺好 \(*′▽`)/
那么测试一下性能吧……
20150118125825.png

请勿使用多线程下载工具下载论坛附件!


WTF!! 递归次数太多了 (╯°□°)╯︵ ┻━┻
而且你们有没有发现 push 后返回的是 99995, 说明在 inset 后数组 b 被清空了啊!

这样怎么能好好的用呢,于是继续想 (ˇˍˇ) ~

继续想 (ˇˍˇ) ~

想 (ˇˍˇ) ~

( ′◔ ‸◔') 我记得函数的 apply 方法可以用将参数放在数组里……
( ′◔ ‸◔') 那么我们就来试试吧:
  1. Array.prototype.inset = function(index, array) {
  2.     Array.prototype.splice.apply(this, [index, 0].concat(array));
  3.     return this;
  4. };
复制代码
注:apply 和 call 都是为了改变某个函数运行时的 context 而存在的,换句话说,就是为了改变函数体内部 this 的指向。与 call 不同的是除了 this 之外,其他参数都需要放在一个数组中。

写好了那就来试试吧,这次直接上大数组吧
20150118131158.png

请勿使用多线程下载工具下载论坛附件!


第一次执行好像出了点问题,耗时明显不科学,后面两次还是靠谱的,而且数组 b 没变。

第一个方法测试时数组 b 元素个数在 10000 之内是可以工作的,不过耗时也有 2ms, 递归的效率明显还是不行。

大致就是这样,收工!
6

查看全部评分

SOS団長

Rank: 15Rank: 15Rank: 15

UID
1469978
帖子
8752
PB币
20162
贡献
0
技术
30
活跃
356
发表于 2015-1-18 13:38:04 IP属地福建 |显示全部楼层
坐沙发~~

SOS団長

Rank: 15Rank: 15Rank: 15

UID
1469978
帖子
8752
PB币
20162
贡献
0
技术
30
活跃
356
发表于 2015-1-18 13:38:21 IP属地福建 |显示全部楼层
不明觉厉,等看得懂的来看

依 然 只 能 看 到 背 影

Rank: 11Rank: 11Rank: 11

UID
679765
帖子
2864
PB币
10441
贡献
0
技术
68
活跃
1730

活动参与先锋 7周年庆典勋章 8周年庆典勋章

发表于 2015-1-18 14:44:53 IP属地浙江 |显示全部楼层
地毯

SOS団長

Rank: 15Rank: 15Rank: 15

UID
1469978
帖子
8752
PB币
20162
贡献
0
技术
30
活跃
356
发表于 2015-1-18 15:26:40 IP属地福建 |显示全部楼层
121665460 发表于 2015-1-18 14:44
地毯

地毯好像是比地板舒服……

节操役

Rank: 17Rank: 17Rank: 17Rank: 17Rank: 17

UID
1333998
帖子
17657
PB币
9464
贡献
0
技术
19
活跃
931
发表于 2015-1-18 15:41:11 IP属地上海 |显示全部楼层
反正我看不懂

Sherry

UID
1597446
帖子
16484
PB币
47153
贡献
3
技术
657
活跃
990

7周年庆典勋章 应用界 8周年庆典勋章

发表于 2015-1-18 21:45:50 IP属地河北 |显示全部楼层
不明觉厉,等看得懂的来看

UID
768908
帖子
16572
PB币
14165
贡献
1
技术
30
活跃
865
发表于 2015-1-18 22:33:03 IP属地上海 |显示全部楼层
更了不起的是楼主是在一台已经爆炸的电脑上完成这些 (╯°□°)╯︵ ┻━┻

远景有关部门[已退役]

Rank: 15Rank: 15Rank: 15

UID
648169
帖子
6043
PB币
15073
贡献
0
技术
76
活跃
4367

Win10先驱者 我是大学生!

发表于 2015-1-18 22:49:56 IP属地未知 |显示全部楼层
笔记?

SOS団長

Rank: 15Rank: 15Rank: 15

UID
1469978
帖子
8752
PB币
20162
贡献
0
技术
30
活跃
356
发表于 2015-1-18 23:09:43 IP属地福建 |显示全部楼层
Nakour 发表于 2015-1-18 21:45
不明觉厉,等看得懂的来看

超版你复制我的真的好吗

Rank: 2Rank: 2

UID
4589479
帖子
67
PB币
24
贡献
0
技术
1
活跃
69
发表于 2015-1-18 23:40:01 IP属地广东 |显示全部楼层
学习了,不错啊

幻想乡中享幸福

UID
1004992
帖子
156603
PB币
213424
贡献
3
技术
142
活跃
2656

荣誉会员 特殊贡献勋章 水神勋章

发表于 2015-1-19 11:19:39 IP属地福建 |显示全部楼层
asfrim 发表于 2015-1-18 22:33
更了不起的是楼主是在一台已经爆炸的电脑上完成这些 (╯°□°)╯︵ ┻━┻

我会修电脑,嘿嘿嘿。。

幻想乡中享幸福

UID
1004992
帖子
156603
PB币
213424
贡献
3
技术
142
活跃
2656

荣誉会员 特殊贡献勋章 水神勋章

发表于 2015-1-19 11:20:03 IP属地福建 |显示全部楼层
zhxhwyzh14 发表于 2015-1-18 22:49
笔记?

从来就没记笔记的习惯。

节操役

Rank: 17Rank: 17Rank: 17Rank: 17Rank: 17

UID
1333998
帖子
17657
PB币
9464
贡献
0
技术
19
活跃
931
发表于 2015-1-19 11:32:38 IP属地上海 |显示全部楼层
aa65535 发表于 2015-1-19 11:19
我会修电脑,嘿嘿嘿。。

电脑修得好,……

幻想乡中享幸福

UID
1004992
帖子
156603
PB币
213424
贡献
3
技术
142
活跃
2656

荣誉会员 特殊贡献勋章 水神勋章

发表于 2015-1-19 11:33:22 IP属地福建 |显示全部楼层
阿伯才的风格 发表于 2015-1-19 11:32
电脑修得好,……

只为自己修电脑。

这是一个马甲

UID
1612747
帖子
13703
PB币
14212
贡献
0
技术
4656
活跃
20984

十周年 7周年庆典勋章 我是大学生!

发表于 2015-1-19 13:53:05 IP属地上海 |显示全部楼层
完全看不懂的来支持一下

Rank: 2Rank: 2

UID
235901
帖子
302
PB币
2528
贡献
0
技术
0
活跃
416
发表于 2015-1-20 11:52:50 IP属地湖北 |显示全部楼层
来学习了
回顶部
Copyright (C) 2005-2024 pcbeta.com, All rights reserved
Powered by Discuz!  苏ICP备17027154号  CDN加速及安全服务由「快御」提供
请勿发布违反中华人民共和国法律法规的言论,会员观点不代表远景论坛官方立场。
远景在线 | 远景论坛 | 苹果论坛 | Win11论坛 | Win10论坛 | Win8论坛 | Win7论坛 | WP论坛 | Office论坛