数组各种方法例子

1.从数组创建键(值)对象

let users = [
  {id: 'john', name: "John Smith", age: 20},
  {id: 'ann', name: "Ann Smith", age: 24},
  {id: 'pete', name: "Pete Peterson", age: 31},
];

let usersById = groupById(users);
function groupById(arr){
	return arr.reduce((obj,item)=>{
			obj[item.id]=obj
		return obj},{})
}

/*期望行为
// 调用函数后,我们应该得到:

usersById = {
  john: {id: 'john', name: "John Smith", age: 20},
  ann: {id: 'ann', name: "Ann Smith", age: 24},
  pete: {id: 'pete', name: "Pete Peterson", age: 31},
}
*/

2.数组去重

function unique(arr) {
  let result = [];

  for (let str of arr) {
    if (!result.includes(str)) {
      result.push(str);
    }
  }

  return result;
}

let strings = ["Hare", "Krishna", "Hare", "Krishna",
  "Krishna", "Krishna", "Hare", "Hare", ":-O"
];

alert( unique(strings) ); // Hare, Krishna, :-O
//
方法 result.includes(str) 在内部遍历数组 result,并将每个元素与 str 进行比较以找到匹配项。
所以如果 result 中有 100 个元素,并且没有任何一项与 str 匹配,那么它将遍历整个 result 并进行 100 次比较。如果 result 很大,比如 10000,那么就会有 10000 次的比较。
这本身并不是问题,因为 JavaScript 引擎速度非常快,所以遍历一个有 10000 个元素的数组只需要几微秒。
但是我们在 for循环中对 arr 的每个元素都进行了一次检测。
因此,如果 arr.length 是 10000,我们会有 10000 * 10000 = 1 亿次的比较。那真的太多了。

3.对数字求和到给定值

题目:编写一个函数sumTo(n) ,计算1+2+3+…+n的和
用三种方法实现:①循环②递归③等差数列求和公式
① 循环的话 速度2

function sumTo(n){
 let sum=0;
 for(let i=1;i<=n;i++){
 	sum+=i
 }
 return sum
}
sumTo(100)//5050

②递归方法 占用资源 慢一些

function sumTo(n){
	if(n==1)return 1;
	return n+sumTo(n-1)
}
sumTo(100)

③ 公式:sumTo(n)=n*(n+1)/2 !!!速度最快 1

function sumTo(n){
	return n*(n+1)/2
}
sumTo(100)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值