js数组篇——待续

一、有以下 3 个判断数组的方法,分别介绍它们之间的区别和优劣
Object.prototype.toString.call() 、 instanceof 以及 Array.isArray()

1:Object.prototype.toString.call() 常用于判断浏览器内置对象时。
封装:

function getClass (a) {
  const str = Object.prototype.toString.call(a)
  return /^\[object (.*)\]$/.exec(str)[1]
}

getClass(undefined) 输出'Undefined'
同理: getClass([]) 输出'Array'

2、instanceof 的内部机制是通过判断对象的原型链中是不是能找到类型的 prototype。

3、 Array.isArray() 用来判断对象是否为数组

二、扁平化数组的函数flatten函数的实现

let arr = [1, 2, [3, 4, 5, [6, 7], 8], 9, 10, [11, [12, 13]]]
const flatten = function (arr) {
    while (arr.some(item => Array.isArray(item))) {
        arr = [].concat(...arr)
    }
    return arr
}
console.log(flatten(arr))
// 这里懂得isArray方法和concat方法就行

或者

  const flatten = array => array.reduce(
	  (acc, cur) => (Array.isArray(cur) ? [...acc, ...flatten(cur)] : [...acc, cur]), 
	  []
  )

或者

let result = [];
let fn = function(arr) {
  for(let i = 0; i < arr.length; i++) {
    let item = arr[i];
    if (Array.isArray(arr[i])){
      fn(item);
    } else {
      result.push(item);
    }
  }
}

或者

let str = JSON.stringify(ary);
arr = str.replace(/(\[|\])/g, '').split(',')

三、求数组最大值:

var max = arr.reduce(function (prev, cur) {
    return Math.max(prev,cur);
});

或者

Math.max.apply(Math, dataArr)

四、求数组最大值位置:

let dataArr = [2,4,9,3]; dataArr.indexOf(Math.max.apply(Math, dataArr))

五、数组去重:

  var arr2 = [];
  var arr = [2, 3, 'h', 'h', 5, 5];
  for (var i = 0; i < arr.length-1; i++) {
    for (var j = i + 1; j < arr.length; j++) {
      if (arr[i] == arr[j]) {
        arr.splice(j,1);
        j--;
      }
    }
  }
  console.log(arr2);

或者 (这个要在数组是纯数字的时候执行)

 var result = [];
      var temp = [];
      var len = 0;
      var num;
      while (len < 10) {
        num = Math.round(Math.random() * 100);
        console.log(temp[num]);
        if (!temp[num]) {
          temp[num] = 1;
          result.push(num);
          len++;
        }
      }
      console.log(result)

或者

var newArr = arr.reduce(function (prev, cur) {
    prev.indexOf(cur) === -1 && prev.push(cur);
    return prev;
},[]);

或者

 var arr = [1,9,8,8,7,2,5,3,3,3,2,3,1,4,5,444,55,22];
 function noRepeat(arr) {
		//定义一个新的临时数组 
		var newArr=[]; 
		//遍历当前数组 
		for(var i=0;i<arr.length;i++) {
		  //如果当前数组的第i已经保存进了临时数组,那么跳过,
		  //否则把当前项push到临时数组里面 
		  if(newArr.indexOf(arr[i]) === -1) {  //indexOf() 判断数组中有没有字符串值,如果没有则返回 -1 
		     newArr.push(arr[i]);
		  }
    	}
    return newArr
  }
  var arr2 = noRepeat(arr);
  console.log(arr2);  

六、Array.from()方法就是将一个类数组对象或者可遍历对象转换成一个真正的数组。
那么什么是类数组对象呢?所谓类数组对象,最基本的要求就是具有length属性的对象。
将类数组对象转换为真正数组:

let arrayLike = {
    0: 'tom', 
    1: '65',
    2: '男',
    3: ['jane','john','Mary'],
    'length': 4
}
let arr = Array.from(arrayLike)
console.log(arr) // ['tom','65','男',['jane','john','Mary']]
例题:
某公司 112 月份的销售额存在一个对象里面,如下:{1:222, 2:123, 5:888},
请把数据处理为如下结构:[222, 123, null, null, 888, null, null, null, null, null, null, null]
答:
var objs = {1:222, 2:123, 5:888};
var results = Array.from({ length: 12 }).map((_, index) => objs[index + 1] || null);
console.log(results)var objs = {1:222, 2:123, 5:888};
Array.from({length:12},(item,index)=>objs[index+1]||null)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值