# 本两周学习总结

### 去重

const unique = (arr) => arr.reduce(
(acc, val) => (acc.indexOf(val) == -1 ? acc.push(val) : acc, acc), []);

const unique = (arr) => arr.filter((val,index)=>arr.indexOf(val)==index);

let arr = [1, 2, 1, 1, 2, 3, 3, 4, 1, 1, 2, 2, 5];
console.log(unique(arr));//[ 1, 2, 3, 4, 5 ]


### iterator 迭代器

Iterator 接口主要为for of 服务的,供for...of 进行消费

value 表示具体的返回值,done是布尔类型的,表示集合是否遍历完成或者是否后续还有可用数据,有false,没有true

const getIterator = list => {
let i = 0;
return {
next: () => ({
done: (i >= list.length),
value: list[i++]
})
}
};
let a = getIterator([1, 2, 3]);
console.log(a.next()); //{ done: false, value: 1 }
console.log(a.next()); //{ done: false, value: 2 }
console.log(a.next()); //{ done: false, value: 3 }
console.log(a.next()); //{ done: true, value: undefined }


var arr=[100,200,300];

var iteratorObj=  arr[Symbol.iterator]();//得到迭代器方法，返回迭代器对象
console.log(iteratorObj.next());


const isIterable = obj => typeof obj[Symbol.iterator] === 'function';


### 解构

let [a, b, c] = [1, 2, 3];
console.log(a, b, c);//1,2,3
let {age,name}={name:'zs', age: 12};
console.log(name, age);// 'zs'  12


let {random}=Math;
console.log(random() * 10);


### 前端大面试

http://bigerfe.com/


### trimStart trimEnd

trimStart 只清除头部的空格

trimEnd 只清楚尾部的空格

### 去重

const responseList = [
{ id: 1, a: 1 },
{ id: 2, a: 2 },
{ id: 3, a: 3 },
{ id: 1, a: 4 },
];
const result = responseList.reduce((acc, cur) => {
const ids = acc.map(item => item.id);
return ids.includes(cur.id) ? acc : [...acc, cur];
}, []);


### 发现一个有趣的需求

const capitalizeHeadline = str => {
return str.split(' ').reduce((acc, val, index, array) => {
return acc + ((index == 0 || index == array.length - 1) ? val[0].toUpperCase() + val.substr(1) : val)+' ';
}, '')
};
// Abd sslsl Dddd


### 给数字添加千分位逗号

const transform = (num = 0) => {
if (num < 0) {
return num
}
let numStr = num + '';
let arr = numStr.split('.');
let a = arr[0].split('');
for (let i = a.length - 3; i > 0; i = i - 3) {
a[i] = ',' + a[i];
}
return arr[1] ? a.join('') + '.' + arr[1] : a.join('')
};


### ＣＳＳ灵感

https://chokcoco.github.io/CSS-Inspiration/#/./shadow/one-sided-shadow.md

### leetCode121 买卖股票的最佳时机

const solution = nums => {
if (nums.length < 2) {
return 0
}
//最大值得初始化为0,最小值为第一个数,循环从1开始
let max = 0, min = nums[0], i = 0;
while (++i < nums.length) {
min = Math.min(min, nums[i]);
max = Math.max(max, nums[i] - min)
}
return max
};


### 从排序数组中删去重复的项

const removeDuplicates = nums => {
if (nums.length < 2) {
return 0
}
let i = 0;
for (let j = 1; j < nums.length; j++) {
if (nums[i] != nums[j]) {
++i;
nums[i] = nums[j]
}
}
nums.length = i + 1;
return nums
};

const removeDuplicates = nums => nums.reduce((acc, val) =>
acc.indexOf(val) === -1 ? acc.concat(val) : acc
, []);


### 反转字符串中的单词

const reverseWord = str => str.split(' ')
.reduce((acc, val) =>acc.concat( val.split('').reverse().join('') + ' ')
, '');
console.log(reverseWord('abc cdfg smd'));


### 905. 按奇偶排序数组

const sortArray = arr => {
let a = 0, max = arr.length - 1, res = [];
for (let item of arr) {
if (item % 2 == 0) {
res[a++] = item
} else {
res[max--] = item
}
}
return res
};
console.log(sortArray([1, 2, 3, 4, 5, 6]));
// [ 2, 4, 6, 5, 3, 1 ]


### 复习 && || !

!   取反
a||b    a为真返回a   a为假返回b
a&&b    a为真返回b   a为假返回a


### 判断字符串或者数组是否唯一

const inUnique = str => {
let obj = {};
for (let item of str) {
if (obj[item]) {
return false
}
obj[item] = true
}
return true
};


### 改变跑马灯的时间

\$('.marquee-box').css('animation-duration','10s')


### 数组转对象

Object.assign({}, [1, 2, 3, 4]);
// { '0': 1, '1': 2, '2': 3, '3': 4 }


### 使得两个数之和等于目标值

const twoSum = (array, target) => {
for (let i = 0; i < array.length; i++) {
let a = array.indexOf(target - array[i]);
if (a > -1 && a != i) {
return [i, a]
}
}
return [-1, -1]
};
console.log(twoSum([1, 2, 3, 4, 5, 6], 3));

posted @ 2019-12-04 15:05  房东家的猫  阅读(...)  评论(...编辑  收藏