数组去重

  1. //利用filter
  2. function unique(arr) {
  3. return arr.filter(function(item, index, arr) {
  4. console.log(item,arr.indexOf(item, 0),index);
  5. //当前元素在原始数组中的第一个索引==当前索引值,如果是返回当前元素
  6. return arr.indexOf(item, 0) === index;
  7. });
  8. }
  9. console.log(unique([1,1,2,2,3])) //[1,2,3]

image.png

  1. //利用ES6 Set去重(ES6中最常用)
  2. function unique (arr) {
  3. return Array.from(new Set(arr))
  4. }
  5. let arr = [1, true, true, false, undefined, null, NaN, NaN, 0, "a", {}, {}]
  6. console.log(unique(arr))
  7. //[1, true, false, undefined, null, 0, "a", {…}, {…}]
  8. // NaN === NaN //false, NaN 找不到自己,返回 -1
  1. //利用 reduce
  2. function unique(arr){
  3. return arr.reduce((pre,item)=>{
  4. if(!pre.includes(item)){
  5. pre.push(item)
  6. }
  7. return pre
  8. },[])
  9. }
  10. console.log(unique([1,1,2,2,3])) //[1,2,3]


数组排序

1. 插入排序

  1. //插入排序
  2. function sort(elements){
  3. // 假设第0个元素是一个有序数列,第1个以后的是无序数列,
  4. // 所以从第1个元素开始将无序数列的元素插入到有序数列中去
  5. for (var i =1; i<=elements.length; i++) {
  6. // 升序
  7. if(elements[i] < elements[i-1]){
  8. // 取出无序数列中的第i个作为被插入元素
  9. var guard=elements[i];
  10. //记住有序数列的最后一个位置,并且将有序数列的位置扩大一个
  11. var j=i-1;
  12. elements[i]=elements[j];
  13. // 比大小;找到被插入元素所在位置
  14. while (j>=0 && guard <elements[j]) {
  15. elements[j+1]=elements[j];
  16. j--;
  17. }
  18. elements[j+1]=guard; //插入
  19. }
  20. }
  21. }
  22. var elements=[3,5,6,8,2,4,7,9,1,10];
  23. document.write('没调用之前:'+elements);
  24. document.write('<br>');
  25. sort(elements);
  26. document.write('被调用之后:'+elements);

2. 快速排序

  1. //快速排序
  2. function quickSort(elements){
  3. if(elements.length <=1){
  4. return elements;
  5. }
  6. var pivotIndex=Math.floor(elements.length / 2);
  7. var pivot=elements.splice(pivotIndex,1)[0];
  8. var left=[];
  9. var right=[];
  10. for(var i=0;i<elements.length;i++){
  11. if(elements[i] < pivot){
  12. left.push(elements[i]);
  13. }else{
  14. right.push(elements[i]);
  15. }
  16. }
  17. return quickSort(left).concat([pivot],quickSort(right));
  18. //concat()方法用于连接两个或者多个数组;该方法不会改变现有的数组,而仅仅会返回被连接数组的一个副本。
  19. };
  20. var elements=[3,5,6,8,2,4,7,9,1,10];
  21. document.write(quickSort(elements));

js 的 sort() :插入排序+快速排序

  • 数组长度不超过10时,使用插入排序。在数组较短时插入排序更有效率。
  • 长度超过10使用快速排序。

3. 冒泡排序

  1. //冒泡排序
  2. function sort(elements){
  3. for(var i=0;i<elements.length-1;i++){
  4. for(var j=0;j<elements.length-1-i;j++){
  5. if(elements[j] > elements[j+1]){
  6. var swap=elements[j];
  7. elements[j]=elements[j+1];
  8. elements[j+1]=swap;
  9. }
  10. }
  11. }
  12. }
  13. var elements=[3,5,6,8,2,4,7,9,1,10];
  14. console.log('before'+elements);
  15. sort(elements);
  16. console.log('after'+elements);

判断两个数组包含的值完全相同,顺序无所谓

  1. let flag = true
  2. const listA = [1, 2, 3]
  3. const listB = [2, 3, 4]
  4. if (listA.length !== listB.length) {
  5. flag = false
  6. } else {
  7. listA.forEach(item => {
  8. if (listB.indexOf(item) === -1) {
  9. flag = false
  10. }
  11. })
  12. }