数组

for循环、for...in循环和forEach循环区别

徘徊边缘 提交于 2020-04-04 14:41:15
1.for循环:是应用最广泛的的循环形式,适用于已知循环次数的场景。 优点:可以控制循环起始和结束。 语法:for ( 定义变量并赋值;判断条件;步长 ){ 循环体; }    2.forEach循环:是一种专门用于针对数组的循环遍历。 语法:数组变量.forEach( function( 参数1,参数2,参数3 ){   循环体; } ); 参数1:存储数组的单元数据; 参数2:存储数组单元索引; 参数3:存储原始数据。 注:参数名称可以任意定义,参数个数根据需求定义。 例: 输出结果: 3.for...in循环:数组、对象都可以使用的循环。 语法: for( var 自定义变量 in 数组/对象 ){   循环体; } 自定义变量:存储数组/对象,索引下标/键名。 注:自定义变量存储的是字符串类型,执行数学运算时需要进行转化。 例: 输出结果: 总结:1.针对数组,3种方法都可以使用,推荐使用forEach循环,简单方便;    2.for...in循环一般较多使用在对象中;    3.for循环在需要控制循环的起始和结束时候使用。 来源: https://www.cnblogs.com/zhanglei154636/p/12631335.html

numpy 添加删除去重及形状变换

自闭症网瘾萝莉.ら 提交于 2020-04-04 11:24:19
一、数组的添加删除与去重 下面是几个常见的数组操作: append:将值添加到数组末尾 insert: 沿指定轴将值插入到指定下标之前 delete: 返回删掉某个轴的子数组的新数组 unique: 寻找数组内的唯一元素 >>> a = np.array([[1,2,3],[4,5,6]]) >>> np.append(a, [7,8,9]) # 附加后,变成了一维的 array([1, 2, 3, 4, 5, 6, 7, 8, 9]) >>> a #原来的数组没有改变 array([[1, 2, 3], [4, 5, 6]]) >>> a.append([10,11,12]) # ndarray没有这个方法 --------------------------------------------------------------------------- AttributeError Traceback (most recent call last) <ipython-input-165-a36f3ca1308b> in <module>() ----> 1 a.append([10,11,12]) AttributeError: 'numpy.ndarray' object has no attribute 'append' >>> np.append(a, [[7,8,9]

震惊两个数组原来是这样比较的。

怎甘沉沦 提交于 2020-04-04 11:19:05
// 如果是两个非原生值比较的话,比如说对象(数组 函数)你需要特别注意的是 == 和 === // 因为这些是通过引用访问的哈, // 所以== 和 === 只是简单的检查这些引用是否匹配。 // 而安全不关心引用的值是什么 //定理2 // 举例来说,在元素之间插入逗号(,) // 数组在默认情况下会转化为字符串。 var a = [1, 2, 3]; var b = [1, 2, 3]; var c = "1,2,3" console.log(a == b); //false //因为是两个非原生值的比较 //而安全不关心引用的值是什么 console.log(a == c); //true //因为是两个非原生值的比较。定理2 console.log(b == c); //true //因为是两个非原生值的比较。定理2 来源: https://www.cnblogs.com/IwishIcould/p/12630656.html

Vue 怎么用 vm.$set() 解决对象新增属性不能响应的问题 ?

谁说我不能喝 提交于 2020-04-04 10:46:58
受现代 JavaScript 的限制 ,Vue 无法检测到对象属性的添加或删除。 由于 Vue 会在初始化实例时对属性执行 getter/setter 转化,所以属性必须在 data 对象上存在才能让 Vue 将它转换为响应式 的。 但是 Vue 提供了 Vue.set (object, propertyName, value) / vm.$set (object, propertyName, value) 来实现为对象添加响应式属性,那框架本身是如何实现的呢? 我们查看对应的 Vue 源码: vue/src/core/instance/index.js export function set (target: Array<any> | Object, key: any, val: any): any { // target 为数组 if (Array.isArray(target) && isValidArrayIndex(key)) { // 修改数组的长度, 避免索引>数组长度导致splcie()执行有误 target.length = Math.max(target.length, key) // 利用数组的splice变异方法触发响应式 target.splice(key, 1, val) return val } // key 已经存在,直接修改属性值 if (key

js 实现对象的混合与克隆效果,带完整版解析代码

女生的网名这么多〃 提交于 2020-04-04 09:34:22
前言: 本人纯小白一个,有很多地方理解的没有各位大牛那么透彻,如有错误,请各位大牛指出斧正!小弟感激不尽。 本篇文章为您分析一下原生JS写对象混合与克隆 对象混合 页面中如下需求 var obj1 = { x: 1, y: "a" } var obj2 = { x: "b", o: 6 } 页面上有两个对象 我们要把这两个对象混合成一个 形成如下结构: // 将obj2混合到obj1中 obj = { x: "b", y: "a", o: 6 } 参考代码: // ES5之前的版本 function mixin(obj1, obj2){ // 第一步: 创建一个对象 var newObj = {}; // 第二步: 循环obj2中的对象 for(var prop in obj2){ // 第三步: 将obj2中的属性添加到新创建爱对象中 newObj[prop] = obj2[prop]; } // 第四步: 循环obj1中的对象 for(var prop in obj1){ // 第五步: 看看obj1中的属性在不在obj2中,如果不在就将他加入的新的对象中 if(!(prop in obj2)){ newObj[prop] = obj1[prop]; } } // 最后返回这个新的对象 return newObj; } // ES6版本 // function mixin

数组的基本理解

♀尐吖头ヾ 提交于 2020-04-04 09:32:57
概念 存储数据长度固定的容器,且存储数据的数据类型一致 定义格式 1.数据类型[] 数组名; 2.数据类型 数组名[]; 数组的初始化 1.动态初始化:创建数组时只给定数组的长度,由系统给出默认的初始化值 2.静态初始化:创建数组时直接将元素确定 //创建一个长度为6的数组 //1.动态初始化 int[] arr1 = new int[6]; for(int i = 0 ; i < arr1.length ;i++){ System.out.println(a[i]);//整数类型初始化默认是0 } //2.静态初始化 int[] arr2 = new int[]{1,2,3,4,5,6}; for(int i = 0 ; i < arr2.length ;i++){ System.out.println(a[i]);//数组索引默认从零开始 } //数组静态初始化简写格式 int[] arr3 = {1,2,3,4,5,6}; 数组元素的访问 每个存放到数组中的元素,都会有一个编号,称之为索引, 通过数组的索引访问到数组中的元素 访问格式:数组名[索引] //默认编号从0开始 通过地址找到数组,通过索引找到元素 数组在内存中的存储 数组是一个引用变量,在内存中分区存储 数组变量-->栈里面 数组元素-->堆里面 通过栈里面的地址去找对应的数组,然后根据索引找对应位置的元素 /

实现把多维数组转为一维数组的几种方式

和自甴很熟 提交于 2020-04-04 06:34:38
在开发过程中遇到一个比较ip大小的情况,并且遇到了把二维数组转为一维数组的情况,翻下资料,做下总结。 方法一:转字符串法 该例子中,tempArr是一个多维数组,使用join将其转为字符串,在使用split方法转换为一维数组。 缺点: 如果数组中的各个项是number,将不可避免的转为字符串。 /** * 使用转字符串法 */ let tempArr = [1,[2,3],[4,5,[6,7]]]; let result_str1 = tempArr.join(',').split(','); console.log(result_str1); // ["1", "2", "3", "4", "5", "6", "7"] 改进: 使用了map进行再次遍历。 这种情况只适用于数组中各个项都是number类型或string类型的情况 // 可以使用循环改进 function unid(arr){ let result_str1 = arr.join(',').split(','); let result_number = result_str1.map(item=>{ return Number(item); }); return result_number; } console.log(unid(tempArr)); // [1, 2, 3, 4, 5, 6, 7] 方法二

《php和mysql web开发》读书笔记

有些话、适合烂在心里 提交于 2020-04-04 04:09:10
总算是强迫自己把第一篇给看完了,在这里做一个小结,将一些知识点记录下来。 一、第一篇 使用PHP 1.php中的注释。php支持c、c++和shell脚本风格注释  /**/多行注释 //单行注释 # 单行注释 2.date()函数。  date("H:i:s");  //15:24:23 date("ymd");  //20130707 3.使用$_POST['username'] $_GET'['username']来得到表单内容,取决于提交表单时使用的方法是post 还是get。无论使用什么方式,都可以使用$_REQUEST['username']来得到表单内容。 4.标识符是变量名称的名称,标识符可以是任何长度。由字母、数字、下划线组成。不能以数字开始。标志符区分大小写,但是函数名称是个例外,函数名不区分大小写。php的特性之一就是它不要求在使用变量之前声明变量。 5.php中的8种数据类型,6种常用,2种不常用。  Integer(整数)  用来表示整数  Float(浮点数,也叫Double,双精度值)  用来表示所有实数  String(字符串)  用来表示字符串  Boolean(布尔值)  用来表示true 或false  Array(数组)    用来保存具有相同类型的多个数据项。  Object(对象)   用来保存类的实例 还有两个特殊的类型:NULL(空

1.7 c之 指针

心已入冬 提交于 2020-04-03 23:28:34
指针 *P代表指针变量P所指的那个变量,也就是变量a。 为什么需要指针? 指针存在的目的就是间接访问。有了指针之后,我们访问变量a不必只通过a这个变量名来访问。而可以通过p = &a; *p = xxx这样的方式来间接访问变量a。 两个重要的运算符: &和* 指针的定和初始化 指针既然是一种变量,那么肯定也可以定义和初始化 第一种:先定义再赋值 int p; //定义指针变量p p = &a; //给p赋值 第二种:定义的同时初始化 int p = &a; //效果等同于上面的两句 使用指针的时候,*P则代表指针变量P所指向的那个变量。 int a = 23; int *p; P=&a; p = 111; 这里相当于a = 111 printf(“a = %d.\n”,a) :指针符号。指针符号在指针定义和指针操作的时候,解析方法是不同的。 int P; 定义指针变量p,这里 p含义不是代表指针变量P所指向的那个指针变量,在定义时这里的 含义告诉编译器P是一个指针。 使用指针的时候, p则代表指针变量p所指向的那个变量。 指针全程是指针变量,其实质就是c语言的一种变量。这种变量比较特殊,通常他的值会被赋值为某个变量的地址值( P = &a ),然后我们可以使用*p这样的方式间接访问p所指向的那个变量。 指针变量本质上是一个变量, 指针变量的类型属于指针类型 指针与数组的初次结合

一步一步写算法(之线性结构的处理)

我只是一个虾纸丫 提交于 2020-04-03 14:33:46
原文: 一步一步写算法(之线性结构的处理) 【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】 我们知道,在内存中的空间都是连续的。也就是说,0x00000001下面的地址必然是0x00000002。所以,空间上是不会出现地址的突变的。那什么数据结构类型是连续内部空间呢,其实就是数组,当然也可以是堆。数组有很多优势,它可以在一段连续空间内保存相同类型的数据,并且对这些数据进行管理。所以从这个意义上说,掌握了数组才能说明你数据结构入门了。 那么,在实际开发中,我们对线性结构应该注意些什么呢?我个人的观点: (1)数组的资源是有限的,必须确定资源的范围 (2)数组中资源的申请和释放必须一一对应,否则很容易造成资源泄漏的现象 (3)数组中的注意事项同样应用于堆分配的连续内存资源空间中 下面是自己设计的一个int分配的小程序,大家可以一起尝试一下: a)设计内存节点的数据形式 typedef struct _DATA_NODE { int* pData; char* pFlag; int num; }DATA_NODE; #define STATUS int #define TRUE 1 #define FALSE 0 b)创建内存节点 DATA_NODE* malloc_node(int number) { DATA_NODE*