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;
}