uniquexiaobai
3/7/2017 - 6:55 AM

Array 工具函数

Array 工具函数

// 数组去重
function unique(arr) {
	return Array.from(new Set(arr));
}

function unique1(arr) {
	var result = [];
	var isNaNExisted = false;

	function _isNaN(v) {
		return typeof v === 'number' && isNaN(v);
	}

	arr.forEach(function (item) {
		if (_isNaN(item)) {
			if (!isNaNExisted) {
				result.push(item);
				isNaNExisted = true;
			}
		} else if (!~result.indexOf(item)) {
			result.push(item);
		}
	});

	return result;
}

function unique2(arr) {
	var result = [];

	arr.forEach(function (item) {
    if (!result.includes(item)) {
			result.push(item);
		}
	});

	return result;
}


// 数组洗牌算法
function shuffle(arr) {
	var r, temp; 

	for (var i = arr.length - 1; i >= 0; i --) {
		r = ~~(Math.random() * (i + 1));
		if (r !== i) {
			temp = arr[r];
			arr[r] = arr[i];
			arr[i] = temp;
		}
	}
}


// 数组扁平化
function flatten(arr) {
	return arr.reduce(function (prev, cur) {
		if (Array.isArray(cur)) {
			return prev.concat(flatten(cur));
		} else {
			prev.push(cur);
			return prev;
		}
	}, []);
}

function flatten1(arr) {
	var result = [];

	function _flatten(arr) {
		for (var i = 0; i < arr.length; i ++) {
			var item = arr[i];

			if (Array.isArray(item)) {
				_flatten(item);
			} else {
				result.push(item);
			}
		}	
	}
	
	_flatten(arr);
	return result;
}

function flatten2(arr) {
	var stack = [];
	var result = [];

	reversePush(stack, arr);
	while (stack.length) {
		var top = stack.pop();

		if (Array.isArray(top)) {
			reversePush(stack, top);
		} else {
			result.push(top);
		}
	}

	function reversePush(stack, arr) {
		for (var i = arr.length - 1; i >= 0; i --) {
			stack.push(arr[i]);
		}
	}

	return result;
}