一般的な方法、オブジェクトのコピーオブジェクト

方法 説明
charAt() 指定された位置の文字を返します。
charCodeAt() で指定された場所でのUnicode文字エンコーディングを返します。
CONCAT() 接続文字列。
の指標() 検索文字列。
一致() 1つまたは複数の正規表現のマッチングを検索します。
交換してください() また、正規表現と一致するサブストリング。
サーチ() マッチする正規表現の値を取得します。
スライス() 文字列の断片を抽出し、新しい文字列で抽出された部分を返します。
スプリット() 文字列は、文字列の配列に分割されます。
toLocaleLowerCase() 小文字に文字列を変換します。
toLocaleUpperCase() 文字列は、大文字に変換しました。
toLowerCaseメソッド() 小文字に文字列を変換します。
toUpperCase() 文字列は、大文字に変換しました。
SUBSTR() 開始インデックス抽出文字列から指定された数の文字。
部分文字列() 抽出されたインデックス番号で指定された2つの文字列の間。
  • 配列

方法 プロパティ
スライス[開始、終了) 元の配列からのインデックス間のアイテムの新しい配列の最後に開始インデックスを返します(元の配列には影響しません)
1つのパラメータ:全ての終わりにN、すなわちN :.
2つのパラメータ:[開始、終了]
スプライス():
削除:二つのパラメータ、開始位置、削除されたアイテムの数を
インサート:3、スタート位置、いくつかの削除、挿入されたアイテム
あるいは:任意のパラメータ、開始位置、削除されたいくつかの、任意の数の項目に挿入
ポップ() 配列の長さを短く、アレイの最後の要素を削除し、戻り値が削除されます。(無引数なし)
押す() 最後のパラメータは、配列にロードされた新しい配列の長さを返します。(任意のパラメータ)
シフト() 配列の最初の要素を削除し、配列の長さマイナス1、戻り値が削除されます。(無引数なし)
アンシフト() 配列の先頭に1つ以上の要素を追加し、新しい長さを返します。(任意のパラメータ)
ソート() 配列をソートするためのパラメータを指定し、値がソートされた配列(引数なし/関数)の後に戻されます
連結(3,4) 二つの配列が互いに接合されています。戻り値はコピー(任意のパラメータ)であります
参加します() 文字列から配列の要素グループは、セパレータにおけるセパレータとして、デフォルトは、カンマ区切りで、省略されています
の指標() (オプション)アイテムを見つけるために、2つのパラメータを受け入れ、配列の先頭から後方に検索およびインデックスの開始位置を見つけます
lastIndexOf() 从数组末尾开始向前查找,接受两个参数,要查找的项(可选)和查找起点位置的索引
every() 对数组中的每一项运行给定函数,如果该函数对每一项都返回true,则返回true。
filter() 对数组中的每一项运行给定函数,返回该函数会返回true的项组成数组。
forEach() 对数组的每一项运行给定函数,这个方法没有返回值。
map() 对数组的每一项运行给定函数,返回每次函数调用的结果组成的数组。
some() 对数组的每一项运行给定参数,如果该函数对任一项返回true,则返回true。以上方法都不会修改数组中的包含的值。
reduce()和reduceRight() 缩小数组的方法,这两个方法都会迭代数组的所有项,然后构建一个最终返回的值。
  • Math

方法 描述
ceil(x) 尽可能取最大。
floor(x) 尽可能取最小。
round(x) 把数四舍五入为最接近的整数。
max(x,y) 返回 x 和 y 中的最高值。
min(x,y) 返回 x 和 y 中的最低值。
pow(x,y) 返回 x 的 y 次幂。
random() 返回 0 ~ 1 之间的随机数。
sqrt(x) 返回数的平方根。
  • 对象的深拷贝/浅拷贝

在javascript中的数据类型可以分为基础数据类型和引用数据类型,只有引用类型才会用到拷贝;

对象就是引用类型的数据;拷贝根据层次可以划分为深拷贝和浅拷贝两种;

浅拷贝只是对对象的各个属性进行一次复制,并不会进行递归复制;

简单的说,就是只会复制对象的第一层属性;深拷贝并不仅仅拷贝对象的第一层属性,而且会递归拷贝目标对象的所有属性

1 使用JSON.parse(JSON.stringify(obj))

会返回原对象的副本,可以进行深拷贝

let newObj = JSON.parse(JSON.stringify(obj));

注意:
当原对象中某个属性值为函数时,会将此属性丢失,拷贝后的对象中没有此属性,因此该方法不可以拷贝用户自定义的方法属性;
同时, 不能用于复制循环引用对象

2 使用ES6中的 Object.assign()

Object.assign() 方法用于将从一个或多个源对象中的所有可枚举的属性值复制到目标对象(即参数中的第一个对象),并返回合并后的对象.
可以复制循环引用对象

let objCopy = Object.assign({}, obj);

注意:
Object.assign 只是浅拷贝,只能复制第一层属性;

3 使用ES6中的展开操作符(…)

const array = ["a","c","d", {four: 4},];
const newArray = [...array];

注意:只对浅拷贝有效

4 使用递归进行深拷贝

function copy (obj) {
    var newobj = obj.constructor === Array ? [] : {};
    if(typeof obj !== 'object') return;   
    for(var i in obj){
        newobj[i] = typeof obj[i] === 'object' ? copy(obj[i]) : obj[i];
    }
    return newobj
}
var copyArray = copy(array)

注意:不适用于循环引用对象,对于循环引用对象,可以使用插件将循环解开.

总结:
(1 )JSON.parse(JSON.stringify(obj))适用于深拷贝属性中没有值为方法的对象,适用于非循环引用的对象;
(2) Object.assign()适用于浅拷贝对象,循环或者非循环都可以;
(3) 递归深拷贝适用于非循环引用的对象.

放到最后:关于数组的拷贝,修改后对原数组无影响

var array = [1, 2, 3, 4];
var newArray = array.slice();

var array = [1, 2, 3, 4];
var newArray = array.concat();

おすすめ

転載: blog.csdn.net/weixin_43931047/article/details/90896090