你真的知道怎么创建一个长度为n的有序数组吗?
2017-12-24 01:19
323 查看
最近做项目发现,越是简单的东西往往越是不简单,而如何把不简单的东西做简单,应该是每一个程序猿应该去追求的。今天遇到一个问题让我重新思考了一下人生。。=.=
好了被绕晕没有,有的话思考一下这个问题,怎么创建一个长度为n的有序数组,像这样[0,1,2,3,4,5,…]。
很简单的问题是不是
你可能直接这样
不得不说这是最麻烦的办法。
或是这样
比上一个好一点,但还是用到了遍历循环,有没有什么方法可以不用循环?
这里有一点难度了
我们可以这样
简单粗暴,是不是突然醍醐灌顶
再简单粗暴一点?
可能下面的看起来清晰一点
好了,程序员是要会偷懒的,再少一点
已经不能再少了!
什么?还能再少?
让我们再少一点?
=.= 静静的看你…
这里就是最简单的写法了
写这篇文没什么特别高大上的新技术,但是也感到眼前一亮是不是。
最后看到这里也挺不容易,不放点有用的东西对不起看到这里的你
虽然ES6语法简单粗暴,但是在用到TypeScript的项目中上面的代码有一多半是会报错的。
简直怀疑人生,明明语法没有错!!
在 Vue + TypeScript 中测试,结果报错
可以看到,多出来一个slice方法,应该是ES6的扩展运算符…转义后变为了slice实现
然后测试
果然是这里的问题,
这里多谢大神的指导,我才弄清楚后面的问题。
在项目里,如果单纯的用babel转义ES6是没有问题的,转义后的代码是这样实现的。
但是在我的Vue项目里,由于有TypeScript,所以这部分ES6代码是被ts-loader转义的,他转义的结果是使用了slice实现,但是在迭代器上,是没有slice方法的,所以会出错。
然后知道了问题就去可以解决了,更改配置文件,让babel转义代码而不是用ts-loader。
但是我实在配置不了。。。
所以就换了一种方法去解决。
返回一个字符串元素的数组,然后使用的时候转换一下数据类型,就可以了。
最近已经找到解决方法了,这里贴出来。
修改tsconfig.json的配置
然后就可以了
文章原址:http://blog.csdn.net/qq_25243451/article/details/78883182
好了被绕晕没有,有的话思考一下这个问题,怎么创建一个长度为n的有序数组,像这样[0,1,2,3,4,5,…]。
很简单的问题是不是
你可能直接这样
let arr = [] for (let i = 0, len = 10; i < len ; i++) { arr = arr.concat([i]) } // arr => [0,1,2,3,4,5,6,7,8,9]
不得不说这是最麻烦的办法。
或是这样
let arr = [] Array.from({length: 10}).map((key, index) => arr = arr.concat([index])) // arr => [0,1,2,3,4,5,6,7,8,9]
比上一个好一点,但还是用到了遍历循环,有没有什么方法可以不用循环?
这里有一点难度了
我们可以这样
let arr = [] arr = Array.from(Array.apply(null, {length: 10}).keys()) // arr => [0,1,2,3,4,5,6,7,8,9]
简单粗暴,是不是突然醍醐灌顶
再简单粗暴一点?
let arr = [] arr = Array.from(Array(10).fill().keys()) // arr => [0,1,2,3,4,5,6,7,8,9]
可能下面的看起来清晰一点
let arr = [] arr.length = 10 Array.from(arr.keys()) // arr => [0,1,2,3,4,5,6,7,8,9]
好了,程序员是要会偷懒的,再少一点
已经不能再少了!
什么?还能再少?
let arr = [] arr = [...Array(10).fill().keys()] // arr => [0,1,2,3,4,5,6,7,8,9]
让我们再少一点?
=.= 静静的看你…
let arr = [] arr = [...Array(10).keys()] // arr => [0,1,2,3,4,5,6,7,8,9]
这里就是最简单的写法了
// 再做一下知识补充 Array.apply(null, {length: 10}) let arr = [] arr.length = 10 Array(10).fill() Array(10) // Array.apply(null, {length: 10}) 和 Array(10).fill()返回的是包含undefined的数组 // [undefined, undefined, ...] // let arr = []; arr.length = 10 和 Array(10)返回的是包含空的数组 // [empty × 10]
写这篇文没什么特别高大上的新技术,但是也感到眼前一亮是不是。
最后看到这里也挺不容易,不放点有用的东西对不起看到这里的你
虽然ES6语法简单粗暴,但是在用到TypeScript的项目中上面的代码有一多半是会报错的。
简直怀疑人生,明明语法没有错!!
在 Vue + TypeScript 中测试,结果报错
Array.apply(...).keys().slice is not a function
可以看到,多出来一个slice方法,应该是ES6的扩展运算符…转义后变为了slice实现
然后测试
[...Array(10).fill().keys()] // 是没有问题的 Array(10).fill().keys().slice() // 发现和上面报错一样
果然是这里的问题,
// 打印这里,是一个数组的迭代器 console.log(Array(10).fill().keys()) // => Array Iterator {}
这里多谢大神的指导,我才弄清楚后面的问题。
在项目里,如果单纯的用babel转义ES6是没有问题的,转义后的代码是这样实现的。
但是在我的Vue项目里,由于有TypeScript,所以这部分ES6代码是被ts-loader转义的,他转义的结果是使用了slice实现,但是在迭代器上,是没有slice方法的,所以会出错。
然后知道了问题就去可以解决了,更改配置文件,让babel转义代码而不是用ts-loader。
但是我实在配置不了。。。
所以就换了一种方法去解决。
Object.keys(Array(10 + 1).join('.')) // => ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9"]
返回一个字符串元素的数组,然后使用的时候转换一下数据类型,就可以了。
最近已经找到解决方法了,这里贴出来。
修改tsconfig.json的配置
// .. aeb2 . "target": "es6", "lib": [ // ... "es6" ],
然后就可以了
文章原址:http://blog.csdn.net/qq_25243451/article/details/78883182
相关文章推荐
- 输入一个数组长度,动态创建数组,所有元素随机生成,输出元素中的最大值
- 第十三周项目1.3创建一个长度为16的数组,先输出3的倍数在输出下标为3的数
- 给定一个有序数组,元素各不相同且升序排列,创建一个高度最小的二叉查找树
- 不使用循环,如何创建一个长度为100的数组
- 输入一个数组长度,动态创建数组,所有元素随机生成,输出元素中的最大值
- 创建长度为16的整型数组,初始化前15个元素,将一个数插入到a[0]
- 第十三周项目1.4创建一个长度为16的数组,删除3的倍数的数,输出剩下的数
- 不使用loop循环,创建一个长度为100的数组,并且每个元素的值等于它的下标
- 3.输入一个数组长度,动态创建数组,所有元素随机生成,输出元素中的最大值
- // 1、输入一个数组长度,动态创建数组,所有元素随机生成,输出元素中的最大值
- 1.输入一个数组长度,动态创建数组,所有元素随机生成,输出元素中的最大值;
- 给定一个有序的数组,元素各不相同且按升序排列,编写一个算法,创建一棵高度最小的二叉查找树?
- 第十四周项目一数组大折腾(3)创建一个长度为16的整形数组a并初始化,先输出数组中元素值为3的倍数的数,再输出所有下标为3的倍数的元素值
- 编写一个JAVA程序,创建指定长度的 int 型数组,并生成 100 以内随机数为数组中的每个元素赋值,然后输出数组
- 第十三周项目1.5创建一个长度为16的数组,并初始化前15个,输入b,并将其插入到a【0】,输出数组
- 【Java】给定一个有序整数数组,元素各不相同且按照升序排列,编写一个算法,创建一个高度最小的二叉查找树
- 求一个长度为n的整型有序数组中是否有出现次数超过n/2的元素
- 第十四周项目一数组大折腾(2)创建一个长度为10的整形数组并初始化,由后往前(由第9个元素向第0个元素方向)输出数组中所有元素的值,改变数组元素的值,令所有的数组加倍,输出改变后的值。
- 程序员面试金典: 9.4树与图 4.3给定一个有序整数数组,元素各不相同且按升序排列,创建一颗高度最小的二叉查找树。
- 算法题:合并N个长度为L的有序数组为一个有序数组(JAVA实现)