Array--Good parts
js数组没有上届
--如果你用大于或等于当前length的数字作为下标来存储一个元素,那么length会被增大以容纳新元素,不会发生数组越界。
数组也是对象
--可以添加属性。a["name"]="sjr",但是length 不变。length属性是这个数组的最大整数属性名加上1。设置length的值,设置更大不会给数组分配更多的空间,设置更小会移除多余元素。
--可以用for in 来遍历一个数组的所有属性。但是for in 无法保证属性的顺序。此外,可能从原型链中得到意外属性的问题依然存在。常规的for循环可以避免这些问题。
--对象没有length属性。
--使用数组还是对象:当属性名是小而连续的整数时,使用数组。否则,使用对象。
--区分数组和对象:js没有一个好的机制来区别数组和对象。我们可以自己对象isArray来弥补这个缺陷。
var isArray = function(value){
return value && typeof value === 'object' && value.constructor === Array;
}
遗憾的是,它在识别从不同的窗口(window)或帧(frame)里构造的数组时会失败。有一个更好的方式去判断一个对象是否为数组。
全兼容滴
var isArray = function(value){
return Object.prototype.toString.apply(value) === '[object Array]';
}
--给数组添加方法
Function.prototype.method = function(name,func){
if(!this.prototype[name]){
this.prototype[name] = func;
}
return this;
};
Array.method = function(f,value){
var i;
for(i = 0; i < this.length; i += 1){
value = f(this[i], value);
}
return value;
}
var add=function(a,b){
return a+b;}
var a=[1,2,3]
a.reduce(add,5)
//11
数组其实就是对象,我们可以直接给一个单独的数组添加方法。
data.total = function(){
return this.reduce(add, 0);
}
total = data.total()
因为'total'不是整数,所以给数组增加一个total属性不会改变它的length。当属性名是整数时,数组才是最有用的,但它们依旧是对象,并且对象可以接受任何字符串作为属性名。
给数组指定初始值
--一维数组:JS数组不会预置值,如果你用[]得到一个新数组,它将是空的。元素是undefined。如果你实现的算法是假设每个元素都从一个已知的元素开始(例如0),那么你必须自己准备好这个数组。
Array.dim = function(demi,value){
var a = [];
for(var i = 0; i < demi; i++){
a[i] = value
}
return a;
}
Array.dim(10,0);
--二维数组:为了创建一个二维数组或者数组的数组,你必须自己去创建那个第二维的数组:
for(i = 0; i < n; i++){
my_array[i] = []
}
Array.matrix = function(m, n, initial){
var a = [],mat = [];
for(var i = 0; i < m; i++){
for(var j = 0; j < n; j++){
mat[j] = initial;
}
a[i] = mat;
}
return a;
}
Array.matrix(2,3,0);
//或者用dim去写
Array.matrix = function(m,n,initial){
var a = [];
for(var i = 0; i < m; i++){
a[i] = Array.dim(n,initial);
}
return a;
};
Array--Good parts的更多相关文章
- Rotate Array 解答
Question Rotate an array of n elements to the right by k steps. For example, with n = 7 and k = 3, t ...
- [Algorithm] Array production problem
Given an array of integers, return a new array such that each element at index i of the new array is ...
- [算法]Rotate Array
You may have been using Java for a while. Do you think a simple Java array question can be a challen ...
- PHP的学习--解析URL
PHP中有两个方法可以用来解析URL,分别是parse_url和parse_str. parse_url 解析 URL,返回其组成部分 mixed parse_url ( string $url [, ...
- Yii2 ActiveForm表单自定义样式
实例: <?php $form = ActiveForm::begin([ 'fieldConfig' => [ 'template' => '<div class=" ...
- [Swift]LeetCode65. 有效数字 | Valid Number
Validate if a given string is numeric. Some examples:"0" => true" 0.1 " => ...
- 【php】php目录路径函数系列
在写框架和项目时候我们经常要获取绝对路径,php有内置函数realpath(), 也可以写个函数来实现这个功能 function getAbsolutePath($path) { $path = s ...
- GeSHi Documentation
GeSHi Documentation Version 1.0.8.11 Authors: © 2004 - 2007 Nigel McNie © 2007 - 2012 Benny Baumann ...
- MTCNN 实现人脸识别
MTCNN(Multi-task CNN) MTCNN难点 WIDER FACE等数据集为我们提供的图片并不是MTCNN支持的训练样本, 需要通过几个脚本将其转为MTCNN可以接受的数据集, 这些脚本 ...
- 「暑期训练」「Brute Force」 Money Transfers (CFR353D2C)
题目 分析 这个Rnd353真是神仙题层出不穷啊,大力脑筋急转弯- - 不过问题也在我思维江化上.思考任何一种算法都得有一个“锚点”,就是说最笨的方法怎么办.为什么要这么思考,因为这样思考最符合我们的 ...
随机推荐
- 剖析OkHttp缓存机制
现在应用市场上的 App 无一不需要网络操作,这些应用的开发者大多数都选择结合使用 OkHttp 和 Retrofit 来完成网络操作.okHttp 最为人称道的一个特性就是它的缓存机制,而我将在本篇 ...
- Android 手写Binder 教你理解android中的进程间通信
关于Binder,我就不解释的太多了,网上一搜资料一堆,但是估计还是很多人理解的有困难.今天就教你如何从 app层面来理解好Binder. 其实就从我们普通app开发者的角度来看,仅仅对于androi ...
- java事务的处理
java的事务处理,如果对数据库进行多次操作,每一次的执行或步骤都是一个事务. 如果数据库操作在某一步没有执行或出现异常而导致事务失败,这样有的事务被执行有的就没有被执行,从而就有了事务的回滚,取消先 ...
- std::sort引发的core
#include <stdio.h> #include <vector> #include <algorithm> #include <new> str ...
- RandomAccessFile、FileChannel、MappedByteBuffer读写文件
s package com.nio; import java.io.Closeable; import java.io.FileNotFoundException; import java.io.IO ...
- VB6.0编程笔记——(2)开发环境准备&学习前导入
工欲善其事必先利其器,着手开始学习写代码之前,我们需要先准备好需要用到的工具.这篇文章会教大家部署好环境,同时会告知前期我们需要知道的一点内容(可以不用特别理解,只要记住用法就行,后续会深入展开介绍) ...
- 安卓 安装 platforms 的时候报错--访问 url 出错
强制使用http 访问连接,并在hosts中添加地址,即可 问题描述 使用SDK Manager更新时出现问题Failed to fetch URL https://dl-ssl.google.com ...
- int (*p)[4] p 是二级指针 二维数组 二级指针 .xml
pre{ line-height:1; color:#2f88e4; background-color:#e9ffff; font-size:16px;}.sysFunc{color:#3d7477; ...
- 一个c++剧情脚本指令系统
项目希望能够实现一些剧情动画,类似角色移动,镜头变化,台词展现等.剧情动画这东西随时需要修改调整,不能写死在代码里.考虑之后认为需要做一个简单的DSL来定制剧情脚本,策划在脚本里按顺序写入命令,然后我 ...
- 【LeetCode】58 - Length of Last Word
Given a string s consists of upper/lower-case alphabets and empty space characters ' ', return the l ...