关于数组技巧的总结

1 删除数组条目中重复的条目(可能有多个),返回值是一个包含被删除的重复条目的新数组。

var arr = [‘a‘,‘a‘,‘a‘,‘a‘,‘b‘,‘c‘,‘d‘,‘b‘,‘a‘,‘e‘];
Array.prototype.distinct = function(){
    var ret = [];
    for (var i=0; i < this.length; i++){
        for (var j = i+1; j<this.length;){
            if (this[i] === this[j]){
                ret.push(this.splice(j, 1)[0]);
            } else{
                j++;
            }
        }
    }
  return ret;
}
alert(arr.distinct());//[a,a,a,a,b]

2 删除数组中重复的条目,返回值是删除重复条目之后的新数组。

var arr = [‘a‘,‘a‘,‘a‘,‘a‘,‘b‘,‘c‘,‘d‘,‘b‘,‘a‘,‘e‘];
//原型方法Array.prototype.unique = function() {
    var o = {}, r = [];  //o哈希表, r为临时数组
    for (var i = 0; i < this.length; i++){
         var v = this[i];
         if (!o[v]){  //判断如果表中没有当前项
            o[v] = true;  //就存入hash表
            r.push(v);   //把当前数组的当前项push到临时数组里面
         }
    }
     return r;
}alert(arr.unique());[a, b, c , d, e]

//传参函数方法

function unique(arr) {
var result = [], hash = {};
for (var i = 0, elem; (elem = arr[i]) != null; i++) {
if (!hash[elem]) {
result.push(elem);
hash[elem] = true;
}
}
return result;
}

alert(unique(arr))

4 求数组中某个元素重复的个数

function count(arr, element){
   var count = 0;
   for (i = 0; i < arr.length; i++){
        if (arr[i] == element){count++}
   }
    alert(count)
}
var arr = new Array(1,2,22,3,5,3,2,6,3);
count(arr, 2)
时间: 2024-10-13 15:24:42

关于数组技巧的总结的相关文章

Java数组技巧攻略

  Java数组技巧攻略 0.  声明一个数组(Declare an array) [js] view plaincopyprint? String[] aArray = new String[5]; String[] bArray = {"a","b","c", "d", "e"}; String[] cArray = new String[]{"a","b",&q

C++指针数组、数组指针、数组名及二维数组技巧汇总

这篇文章主要介绍了C++指针数组.数组指针.数组名及二维数组技巧汇总,对于深入理解C++数组与指针来说非常重要,需要的朋友可以参考下. 本文较为详细的分析了关于理解C++指针数组,数组指针,数组名,二维数组的一些技巧.是比较重要的概念,相信对于大家的C++程序设计有一定的帮助作用. 一.关于数组名 假设有数组: 1 int a[3] = {1, 2, 3} 1.数组名代表数组第一个元素的地址,注意,不是数组地址(虽然值相等),是数组第一个元素地址,a 等同于 &a[0]; a+1是第二个元素的地

分拆数组技巧应用

给你一个数组A[1..n],请你在O(n)的时间里构造一个新的数组B[1..n],使得B[i]=A[1]*A[2]*...*A[n]/A[i].你不能使用除法运算. 思路1:题目中说明,不能用除法,那一定是在相乘的时候,省略那一项,然后时间复杂度要0(n),就不能两层循环,而是要利用前面的相乘信息来降低复杂度. 算法:相似的分拆技术在数组题中.线性时间构造两个新数组,从开始遍历相乘 T1[0] =1,T1[i]=T[i-1]*A[i-1]  ;而 T2从后往前遍历相乘 T2[len-1] =1,

JavaScript数组技巧

1.随机选择一个数组项 var items = [1, 2, 'a', 3, 4, 'b', 5, 'c', 6, 119, 'd']; var randomItem = items[Math.floor(Math.random() * items.length)]; 2.将参数对象转换为数组 var argArray = Array.prototype.slice.call(arguments); 3.把一个数组添加到另外一个数组 var arr1 = [1, 2, 3]; var arr2

array_map的多个数组技巧

# 获取家列表 $home_list = Model::home_users()->selectBySql(     'select     h.home_id,h.name     from home_users as hu left join home as h on hu.home_id = h.home_id      where hu.user_id=?'     ,[$this->token_info['id']] ); 输出:  [         ['home_id'=>

后缀数组的一些技巧

p { margin-bottom: 0.25cm; line-height: 120% } 后缀数组sa[i]:i<j,有sa[i]开头的字符串字典序<sa[j]开头字典序. 求后缀数组的方法:倍增{ 按一段排序,倍增至第二段为第二关键字,把他的值搞到桶中,比较. 若两个合并的串前后两段一毛一样,排名设为一样.就这样搞. } rnk[i]:i为开头的后缀的排名 height数组:KMP的思想{ height数组为排名为i与i-1的后缀的最长公共子串. 利用KMP的思想:有h[rnk[i]]&

用数组解决问题(一)

由于数组在编程中极为常见,并且数组技巧在非数组场合下也常常被使用,因此数组可以作为用数据结构解决问题的重要练兵场所. 一.基础知识概述 1,存储 这是最基本的操作.数组是一组变量的集合,我们可以对其中的每个变量进行赋值. tenIntegerArray[0] = 5; //把整数5赋值给前面所声明的数组的第1个元素 int tenIntegerArray[10] = {1,2,3,6,12,-57,30987,0,-287,9}; //给数组中的每个元素赋一个特定的值 int tenIntege

【Pascal&#39;s Triangle II 】cpp

题目: Given an index k, return the kth row of the Pascal's triangle. For example, given k = 3,Return [1,3,3,1]. Note:Could you optimize your algorithm to use only O(k) extra space? 代码: class Solution { public: vector<int> getRow(int rowIndex) { vector

Numpy Usage Introduction

Reference : http://my.oschina.net/u/175377/blog/74406 试验性的Numpy教程 原文来自Tentative NumPy Tutorial 目录 先决条件 基础篇 一个例子13 创建数组 打印数组 基本运算 通用函数(ufunc) 索引,切片和迭代 形状操作 更改数组的形状 组合(stack)不同的数组 将一个数组分割(split)成几个小数组 复制和视图 完全不拷贝 视图(view)和浅复制 深复制 函数和方法(method)总览 进阶 广播法