排列
从排序的数组中删除重复项
/**
* @param {number[]} nums
* @return {number}
*/
var removeDuplicates = function(nums) {
const ret=[];
for(let v of nums){
if(ret.indexOf(nums[v]) === -1){
ret.push(nums[v]);
}
console.log(ret);
}
console.log(ret);
return ret;
};
/**
* @param {number[]} nums
* @return {number}
*/
var removeDuplicates = function(nums) {
var tmpObj = {};
var result = [];
Array.from(new Set(nums)).forEach(function(a) {
var key = (typeof a) + a;
if (!tmpObj[key]) {
tmpObj[key] = true;
result.push(a);
}
});
console.log(result);
};
一行代码实现数组去重(ES6)
- ES6中新增了Set数据结构,类似于数组,但是 它的成员都是唯一的 ,其构造函数可以接受一个数组作为参数,如:
let array = [1, 1, 1, 1, 2, 3, 4, 4, 5, 3];
let set = new Set(array);
console.log(set);
// => Set {1, 2, 3, 4, 5}
- ES6中Array新增了一个静态方法Array.from,可以把类似数组的对象转换为数组,如通过querySelectAll方法得到html DOM Node List,以及ES6中新增的Set和Map等可遍历对象,如:
let set = new Set();
set.add(1).add(2).add(3);
let array = Array.from(set);
console.log(array);
// => [1, 2, 3]
于是,现在我们可以用一行代码实现数组去重了:
let array = Array.from(new Set([1, 1, 1, 2, 3, 2, 4]));
console.log(array);
// => [1, 2, 3, 4]
附:ES5实现数组去重
var array = [1, '1', 1, 2, 3, 2, 4];
var tmpObj = {};
var result = [];
array.forEach(function(a) {
var key = (typeof a) + a;
if (!tmpObj[key]) {
tmpObj[key] = true;
result.push(a);
}
});
console.log(result);
// => [1, "1", 2, 3, 4]
最好的时机买卖股票II
假设你有一个数组,其中第i 个元素是第i天给定股票的价格。
设计一个算法来找到最大的利润。您可以根据需要完成尽可能多的交易(即多次买入和卖出一次股票)。但是,您不可以同时进行多笔交易(即您必须在再次购买之前出售股票)。
var maxProfit = function(prices) {
return Math.max(prices)
};
下面是扩展运算符取代apply方法的一个实际的例子,应用Math.max方法,简化求出一个数组最大元素的写法。
// ES5 的写法
Math.max.apply(null, [14, 3, 77])
// ES6 的写法
Math.max(...[14, 3, 77])
// 等同于
Math.max(14, 3, 77);
上面代码中,由于 javascript 不提供求数组最大元素的函数,所以只能套用Math.max函数,将数组转为一个参数序列,然后求最大值。有了扩展运算符以后,就可以直接用Math.max了。