ホームページ >ウェブフロントエンド >フロントエンドQ&A >JavaScript 配列の一般的なメソッドは何ですか?

JavaScript 配列の一般的なメソッドは何ですか?

青灯夜游
青灯夜游オリジナル
2021-06-22 14:46:379511ブラウズ

一般的に使用されるメソッド: 1.push(); 2.unshift(); 3.pop(); 4.shift(); 5.splic(); 6.slice(); 7.sort( ) ; 8. concat(); 9. reverse(); 10. join(); 11. forEach() など

JavaScript 配列の一般的なメソッドは何ですか?

このチュートリアルの動作環境: Windows7 システム、JavaScript バージョン 1.8.5、Dell G3 コンピューター。

JavaScript 配列の一般的なメソッド

配列には、配列要素を追加、削除、置換、並べ替えするためのいくつかの一般的なメソッドが用意されています。

1) Push(要素 1,...,要素 n)

push() メソッドは、パラメータで指定された要素を配列の末尾に追加できます順番に、要素の後に追加の配列の長さを返します (このメソッドには少なくとも 1 つのパラメーターが必要です)。例は次のとおりです。

var arr = [1,2,3];
alert(arr.push(4));//返回最终数组的长度:4
alert(arr);//返回:1,2,3,4
alert(arr.push(5,6,7));//返回最终数组的长度:7
alert(arr);//返回:1,2,3,4,5,6,7

2) unshift(element 1,...,element n)

unshift() メソッドは、パラメータを配列の先頭に順番に追加し、要素を追加した後の配列の長さを返します。メソッドには少なくとも 1 つのパラメータが必要です。注: IE6 および IE7 はメソッドの戻り値をサポートしていません。例は次のとおりです。

var arr = [1,2,3];
alert(arr.unshift('a'));//返回最终数组的长度:4
alert(arr);//返回:a,1,2,3
alert(arr.unshift('b','c','d'));//返回最终数组的长度:7
alert(arr);//返回:b,c,d,a,1,2,3

3) pop()

pop() メソッドは、配列の最後の要素をポップ (削除) し、ポップされた要素を返します。 。例は次のとおりです。

var arr = ['A','B','C','D'];
alert(arr.pop());//返回:D
alert(arr);//返回:A,B,C

4)shift()

shift() メソッドは、配列の最初の要素を削除し、削除された要素を返します。例は次のとおりです。

var arr = ['A','B','C','D'];
alert(arr.shift());//返回:A
alert(arr);//返回:B,C,D

5) splice(index,count[,element 1,...,element n])

splic() メソッドは次のとおりです。比較的強力で、指定した数の要素の削除、指定した要素の置換、指定した位置への要素の追加を実装できます。これらのさまざまな関数の実装は、メソッド パラメーターと組み合わせて決定する必要があります。

パラメーターにインデックスとカウントの 2 つのパラメーターしかない場合、カウントが 0 に等しくない場合、splice() メソッドは削除関数を実行し、同時に削除された要素を返します:index パラメータで指定された位置から count パラメータで指定された数の要素を削除します;

パラメータが 3 つ以上あり、count パラメータが0 ではない場合、splice() メソッドは置換関数を実装し、置換された要素を同時に返します。 : 3 番目以降のパラメーターを使用して、index パラメーターで指定された位置から始まる count パラメーターで指定された数の要素を置換します。

##パラメータが 3 つ以上あり、count パラメータが 0 の場合、splice() メソッドの追加機能を実装します。3 番目以降のパラメータを使用して、index パラメータで指定された位置に追加します。

splice()メソッドで実装される各関数の例は以下のとおりです。

① splice() を使用して、指定した位置から指定した数の要素を削除します。

var arr = ['A','B','C','D'];
//2个参数,第二个参数不为 0,实现删除功能
alert(arr.splice(0,2));
alert(arr);  //返回C,D

② splice() を使用して、指定した位置から始まる指定した数の要素を指定した要素に置き換えますelement:

var arr = ['A','B','C','D'];
//3个参数,第二个参数不为 0,实现替换功能:用 a 替换掉 A,返回:A
alert(arr.splice(0,1,'a'));
alert(arr);  //返回:a,B,C,D
alert(arr.splice(0,2,'a or b'));//用a or b替换掉a和B,返回a,B
alert(arr);  //返回:a or b,C,D

③ splice() を使用して、指定された位置に指定された要素を追加します:

var arr = ['A','B','C','D'];
//4个参数,第二个参数为 0,实现添加功能:在下标为 1 处添加 aaa,bbb,没有返回值
alert(arr.splice(1,0,'aaa','bbb'));
alert(arr);//返回:A,aaa,bbb,B,C,D

[例 1] splice() メソッドを使用して、配列の重複排除を実現します。

<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>使用splice方法实现数组去重</title>
<script>
     var arr = [1,2,2,2,4,2];
     for(var i = 0; i < arr.length; i++){
         for(var j = i + 1; j < arr.length; j++){
              if(arr[i] == arr[j]){
                  arr.splice(j,1);//删除 j 位置处的元素
                  j--;
              }
         }
     }
     alert(arr);//返回1,2,4三个元素
</script>
</head>
<body>
</body>
</html>

上記のコードは、2 つのパラメーターを指定した splice() を使用して、指定された要素を削除する関数を実装しています。

6) slide(index1[,index2])

スライス() メソッドは、配列オブジェクトのインデックス 1 ~ インデックス 2 ~ 1 の間の要素を含むスライスを返します。 。 Index2 パラメータは省略可能ですが、省略した場合は、index1 の位置から最後の位置まで要素を返すことになります。このメソッドは指定された要素を読み取るだけで、元の配列には変更を加えないことに注意してください。

例は次のとおりです:

var arr = [&#39;A&#39;,&#39;B&#39;,&#39;C&#39;,&#39;D&#39;];
alert(arr.slice(0,3));  //返回:A,B,C
alert(arr);   //返回A,B,C,D
alert(arr.slice(0));   //返回数组全部元素:A,B,C,D
alert(arr);   //返回A,B,C,D

7) sort()、sort(compareFunction)

sort() メソッドは、次に従って配列をソートするために使用されます。特定のルールに従う: メソッドのパラメータが空の場合、配列要素は辞書編集順に並べ替えられます (つまり、要素の Unicode エンコードが小さい順に並べ替えられます); パラメータが匿名関数の場合、配列は要素は、無名関数で指定されたルールに従って並べ替えられます。 sort() はソート後にソートされた配列を返します。

① 配列を辞書順に並べ替えます。

var arr = [&#39;c&#39;,&#39;d&#39;,&#39;a&#39;,&#39;e&#39;];
alert(arr.sort());   //返回排序后的数组:a,c,d,e
alert(arr);   //返回排序后的数组:a,c,d,e

上記のコードから、パラメータを指定しない場合、sort() は配列内の要素を辞書順に並べ替えることがわかります。

次に、要素の sort() を使用していくつかの数値を並べ替え、結果を確認します。

var arr = [4,3,5,76,2,0,8];
arr.sort();
alert(arr);  //返回排序后的数组:0,2,3,4,5,76,8

並べ替え後の結果は、予想される 76 ではないことがわかります。最終的には 8 が最後にランクインしましたが、これらの要素の中で 8 が最も大きい、つまり数値の大小によって要素がソートされていないと考えられます。

なぜこのような結果が生じるのでしょうか?これは、sort() がデフォルトで各要素を文字列でソートするためです。ソートの際、要素の各文字を左から右にビットごとに比較します。対応するビットの Unicode エンコードが大きいほど、要素も大きくなります。今回は、以下の文字は比較されなくなり、以下の位置の文字は、対応する文字が同じ場合にのみ比較されます。明らかに、上記の配列は、sort() のデフォルトのソート規則を使用してソートされています。この時点で、配列内の要素を数値サイズで並べ替える場合は、匿名関数のパラメーターを使用して並べ替えルールを変更する必要があります。

② 無名関数のパラメータで指定されたルールに従って配列を並べ替えます。

以下は、上記の数値要素を数値サイズで並べ替える匿名関数を定義することで、sort() のデフォルトの並べ替えルールを変更します。
var arr = [4,3,5,76,2,0,8];
arr2.sort(function(a,b){
     return a-b;//从小到大排序
     //return b-a;//从大到小排序
});
alert(arr);//返回排序后的数组:0,2,3,4,5,8,76

说明:匿名函数中返回第一个参数减第二个参数的值,此时将按元素数值从小到大的规则排序各个元素:当两个参数的差为正数时,前后比较的两个元素将调换位置排序;否则元素不调换位置。如果返回第二个参数减第一个参数的值,则按元素数值从大到小的规则排序各个元素,元素调换规则和从小到大类似。

当数组元素的前缀为数字而后缀为字符串时,如果希望这些元素能按数字大小进行排序,此时需对匿名函数中的参数作一些变通处理。因为这些参数代表了数组元素,所以它们也是一个包含数字和字符的字符串,因此要按数字大小来排序它们,就需要将参数解析为一个数字,然后再返回这些解析结果的差。

示例如下:

var arrWidth = [&#39;345px&#39;,&#39;23px&#39;,&#39;10px&#39;,&#39;1000px&#39;];
arrWidth.sort(function(a,b){
     return parseInt(a)-parseInt(b);
});
alert(arrWidth);//排序后的结果为:10px,23px,345px,1000px

此外,我们通过匿名函数,还可以实现随机排序数组元素。示例如下:

var arr = [1,2,3,4,5,6,7,8];
arr.sort(function(a,b){
     return Math.random()-0.5;//random()返回:0~1之间的一个值
});
alert(arr);//排序后的结果为:4,3,1,2,6,5,7,8。注意:每次执行的结果可能会不一样

上述代码中的匿名函数并没有返回两个参数的差值,而是返回 Math 对象中的 random() 随机函数和 0.5 的差值,这就使得元素的排序将不是根据元素大小来排序。由于 random() 的值为 0~1 之间的一个随机值,所以它和 0.5 的差时正时负,这就导致数组元素位置的调换很随机,所以排序后的数组是随机排序的。

8) concat(数组1,…,数组n)

concat() 将参数指定的数组和当前数组连成一个新数组。示例如下:

var arr1 = [1,2,3];
var arr2 = [4,5,6];
var arr3 = [7,8,9];
alert(arr1.concat(arr2,arr3));//最终获得连接后的数组:1,2,3,4,5,6,7,8,9

9) reverse()

reverse() 方法可返回当前数组倒序排序形式。示例如下:

var arr = [1,2,3,4,5,6];
alert(arr.reverse());//返回:6,5,4,3,2,1

10) join(分隔符)

join() 方法可将数组内各个元素按参数指定的分隔符连接成一个字符串。参数可以省略,省略参数时,分隔符默认为“逗号”。

11) forEach()

forEach() 方法用于对数组的每个元素执行一次回调函数。

语法如下:

array对象.forEach(function(currentValue[,index[,array]])[,thisArg])

forEach() 方法的第一个参数为 array 对象中每个元素需要调用的函数。

forEach() 方法中的各个参数说明如下:

  • currentValue 参数:必需参数,表示正在处理的数组元素(当前元素);

  • index 参数:可选参数,表示正在处理的当前元素的索引;

  • array 参数:可选参数,表示方法正在操作的数组;

  • thisArg 参数,可选参数,取值通常为 this,为空时取值为 undefined。

forEach() 函数的返回值为 undefined。示例如下:

var fruit = ["苹果","橙子","梨子"];
fruit.forEach(function(item,index){
    console.log("fruit[" + index + "] = " + item);
});

上述示例的运行后将在控制台中分别显示:fruit[0]=苹果、fruit[1]=橙子和fruit[2]=梨子。

12) filter()

filter() 方法用于创建一个新的数组,其中的元素是指定数组中所有符合指定函数要求的元素。

语法如下:

array对象.filter(function(currentValue[,index[,array]])[,thisArg])

filter() 方法的第一个参数为回调函数,array 对象中每个元素都需要调用该函数,filter() 会返回所有使回调函数返回值为 true 的元素。

filter() 方法中的各个参数说明如下:

  • currentValue 参数:必需参数,表示正在处理的数组元素(当前元素);

  • index 参数:可选参数,表示正在处理的当前元素的索引;

  • array 参数:可选参数,表示方法正在操作的数组;

  • thisArg 参数,可选参数,取值通常为 this,为空时取值为 undefined。

filter() 函数返回一个新数组,其中包含了指定数组中的所有符合条件的元素。如果没有符合条件的元素则返回空数组。

示例如下:

var names1 = ["张山","张小天","李四","张萌萌","王宁","陈浩"];//原数组
function checkName(name){ //定义回调函数,判断名字是否姓“张”
     if(name.indexOf("张") != -1){
              return true;
         }else{
              return false;
         }
}
var names2 = names1.filter(checkName);//对names1执行回调用函数,返回所有姓张的名字
names2.forEach(function(item,index){//遍历names2数组中的每个元素
          console.log("names2[" + index + "] = " + item);
});

上述示例运行后将在控制台中分别显示:names2[0]=张山、names2[1]=张小天和names2[2]=张萌萌。

13) map()

map() 方法用于创建一个新的数组,其中的每个元素是指定数组的对应元素调用指定函数处理后的值。

语法如下:

array对象.map(function(currentValue[,index[,array]])[,thisArg])

map() 方法的第一个参数为回调函数,array 对象中每个元素都需要调用该函数。

map() 方法中的各个参数说明如下:

  • currentValue 参数:必需参数,表示正在处理的数组元素(当前元素);

  • index 参数:可选参数,表示正在处理的当前元素的索引;

  • array 参数:可选参数,表示方法正在操作的数组;

  • thisArg 参数,可选参数,取值通常为 this,为空时取值为 undefined。

map() 函数返回一个新数组,其中的元素为原始数组元素调用回调函数处理后的值。示例如下:

var number = [1,2,3];//原数组
var num=number.map(function(item){//对原数组中的每个元素*2,将值分别存储在num数组中
          return item * 2;
});
num.forEach(function(item,index){//遍历num中的每个元素
          console.log("num[" + index + "]=" + item);
});

上述示例运行后将在控制台中分别显示:num[0]=2、num[1]=4和num[2]=6。

14) reduce()

reduce() 用于使用回调函数对数组中的每个元素进行处理,并将处理进行汇总返回。语法如下:

array对象.reduce(function(result,currentValue[,index[,array]])[,initialValue])

reduce() 方法的第一个参数为回调函数。

reduce() 方法中的各个参数说明如下。

  • result 参数:必需参数,表示初始值或回调函数执行后的返回值。在第一次调用回调函数前,result 参数表示初始值;在调用回调函数之后,result 参数表示回调函数执行后的返回值。

    需要注意的是,如果指定了 initialValue 参数,则初始值就是 initialValue 参数值,否则初始值为数组的第一个元素。

  • currentValue 参数:必需参数,表示正在处理的数组元素(当前元素)。

    需要注意的是,如果指定了 initialValue 参数,则第一次执行回调函数时的 currentValue 为数组的第一个元素,否则为第二个元素。

  • index 参数:可选参数,表示正在处理的当前元素的索引。

  • array 参数:可选参数,表示方法正在操作的数组。

  • initialValue 参数,可选参数,作为第一次调用回调函数时的第一个参数的值。如果没有提供该参数,第一次调用回调函数时的第一个参数将使用数组中的第一个元素。

    需要注意的是:对一个空数组调用 reduce() 方法时,如果没有指定 initialValue 参数此时将会报错。

reduce() 的使用示例如下:

var num1 = [1,3,6,9];
//reduce()没有initialValue参数
var num2 = num1.reduce(function(v1,v2){ //①
     return v1 + 2 * v2;//将当前元素值*2后和初始值或函数的前一次执行结果进行相加
});
console.log("num2=" + num2);//输出:num2=37
//reduce()提供了initialValue参数
var num3 = num1.reduce(function(v1,v2){ //②
     return v1 + 2 * v2;//将当前元素值*2后和初始值或函数的前一次执行结果进行相加
},2);
console.log("num3=" + num3); //输出:num3=40

上述示例中,① 处调用的 reduce() 没有指定 initialValue 参数,因而初始值为数组的第一个元素,即 1,此时 reduce() 的执行过程等效于:1+2*3+2*6+2*9 运算表达式的执行,结果返回 37。② 处调用的 reduce() 指定了值为 2 的 initialValue 参数,因而初始值为 2,此时 reduce() 的执行过程等效于:2+2*1+2*3+2*6+2*9 运算表达式的执行,结果返回 40。

15) find()

find() 用于获取使回调函数值为 true 的第一个数组元素。如果没有符合条件的元素,将返回 undefined。

语法如下:

array对象.find(function(currentValue[,index[,array]])[,thisArg])

filter() 方法的第一个参数为回调函数,array 对象中每个元素都需要调用该函数,filter() 会返回所有使回调函数返回值为 true 的元素。

filter() 方法中的各个参数说明如下:

  • currentValue 参数:必需参数,表示正在处理的数组元素(当前元素);

  • index 参数:可选参数,表示正在处理的当前元素的索引;

  • array 参数:可选参数,表示方法正在操作的数组;

  • thisArg 参数,可选参数,取值通常为 this,为空时取值为 undefined。

find() 函数使用示例如下:

var names = ["Tom","Jane","Marry","John","Marissa"];
//定义回调函数
function checkLength(item){
     return item.length >= 4;
}
var name = names.find(checkLength);//返回名字数组中名字长度大于或等于4的第一个名字
console.log("name: " + name);

上述示例运行后将在控制台中输出 name:Jane。

【相关推荐:javascript学习教程

以上がJavaScript 配列の一般的なメソッドは何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。