javascript 中关于array的常用方法详解(2)

/** * 对两个数组取并集 * @param target * @param array * @returns {Array} */ function union(target,array) { return unique(target.concat(array)); } /** * ES6的并集 * @param target * @param array * @returns {Array} */ function union1(target,array) { return Array.from(new Set([...target,...array])); } /** * 对两个数组取交集 * @param target * @param array * @returns {Array.<T>|*} */ function intersect(target,array) { return target.filter(function(n) { return ~array.indexOf(n); }) } /** * ES6 交集 * @param target * @param array * @returns {Array} */ function intersect1(target,array) { array = new Set(array); return Array.from(new Set([...target].filter(value => array.has(value)))); } /** * 差集 * @param target * @param array * @returns {ArrayBuffer|Blob|Array.<T>|string} */ function diff(target,array) { var result = target.slice(); for (var i = 0;i < result.length;i++) { for (var j = 0; j < array.length;j++) { if (result[i] === array[j]) { result.splice(i,1); i--; break; } } } return result; } /** * ES6 差集 * @param target * @param array * @returns {Array} */ function diff1(target,array) { array = new Set(array); return Array.from(new Set([...target].filter(value => !array.has(value)))); }

第六部分

数组包含指定目标。

/** * 判定数组是否包含指定目标 * @param target * @param item * @returns {boolean} */ function contains(target,item) { return target.indexOf(item) > -1; }

最后模拟一下数组中的pop,oush,shift和unshift的实现原理

const _slice = Array.prototype.slice; Array.prototype.pop = function() { return this.splice(this.length - 1,1)[0]; }; Array.prototype.push = function() { this.splice.apply(this,[this.length,0].concat(_slice.call(arguments))); return this.length; }; Array.prototype.shift = function() { return this.splice(0,1)[0]; }; Array.prototype.unshift = function() { this.splice.apply(this, [0,0].concat(_slice.call(arguments))); return this.length; };

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wypywg.html