目次
value()、ordinal()、および valueOf() メソッド
JavaScriptの配列操作
今日は、
javascript
開発者の役に立つことを願って、配列の一般的な操作をいくつか説明します。以下の 3 つの一般的なループを見てみましょう。
for ループ
var arr =[1, 3, 8, 4]
for (var i = 0,j = arr.length; i < j; i++) {
console.log(arr[i], i)
}
// Prints:
// [0] is 1 0
// [1] is 3 1
// [2] is 8 2
// [3] is 4 3
for in ループ
var arr =[1, 3, 8, 4]
var map ={a: 1,b: 2,c: 3}
Array.prototype.text =5
for (var i in arr) {
console.log(arr[i], i)
}
for (var i in map) {
console.log(map[i], i)
}
// Prints arr:
// [0] is 1 "0"
// [1] is 3 "1"
// [2] is 8 "2"
// [3] is 4 "3"
// [4] is 5 "text"
//prints map:
// [0] is 1 "a"
// [1] is 2 "b"
// [2] is 3 "c"
for ループ
var arr =[1, 3, 8, 4]
for (var i of arr) {
console.log(i)
}
// Prints:
// [0] is 1
// [1] is 2
// [2] is 3
// [3] is 8
// [4] is 4
for
ループとループの両方が配列自体を走査していることがわかりますfor of
が、違いは i の値であり、前者はインデックス、後者は配列の値です。for in
ループは配列自体を走査するだけでなく、プロトタイプも走査し、同時にオブジェクトを走査することができます。ここで、i の値はstring
「0,1,2,3」型であることに注意してください。 要約:for
ループはほとんどの状況を満たすことができますが、最も面倒なのはインデックスの取得です。for of
配列を直接取得する方が良いでしょう。その価値観のようなもの。for in
ループ関数は最も強力で、オブジェクトをトラバースできますが、プロトタイプ オブジェクトをトラバースするという欠点があり、トラバースに影響を与える可能性があります。上記 3 つのループはbreak
ループから抜け出すことができます。
forEach ループ
var arr =[1, 3, 8, 4]
arr.forEach((row, index, test) = >{
console.log(row, index, test)
})
// Prints:
// [0] is 1 0 arr
// [1] is 2 1 arr
// [2] is 3 2 arr
// [3] is 8 3 arr
// [4] is 4 4 arr
forEach
ループとfor in
ループは非常に似ていることがわかりますforEach
が、違いは、トラバーサルがコールバック関数の形式であり、パラメータが配列値、インデックス、および配列自体であることですrow
。それ自体は処理でき、配列自体は変更されます。forEach
横断を中断する必要性にはあまり優しくなく、break
通過によってループを終了することはできません。ほとんどの場合forEach
、トラバーサルを満たすのは簡単ですが、forEach
ループにはコンテキスト変数の問題があります (アロー関数が使用できない場合は、この問題を回避するためにアロー関数が使用されます)。
マップトラバース
var arr =[1, 3, 8, 4]
var newArr = arr.map((row, index, test) = >{
return row
})
arr.push(5)
console.log(arr, newArr)
// Prints:
//[1,3,8,4,5],[1,3,8,4]
map
トラバーサルはforEach
トラバーサル パラメータと同じです。コールバック関数は配列全体をトラバースするためにも使用されます。違いは、map
トラバーサルがreturn
新しい配列を返すことです。
フィルター操作
var arr =[1, 3, 8, 4]
var newArr = arr.filter((row, index, test) = >{
return row >= 5
})
console.log(newArr)
// Prints:
//[8]
filter
この操作は、配列をフィルター処理し、条件を満たす値を見つけて新しい配列を返すために使用されます。コールバック関数のパラメーターは同じであり、新しい配列の条件が満たされるかどうかを判断するために戻りますforEach
。true false
連結操作
var arr =[1, 3, 8, 4]
var arr2 =[4, 5]
var newArr = arr.concat(arr2)
var newArr1 = arr.concat()
console.log(newArr, arr2)
// Prints:
//[1, 3, 8, 4, 4, 5]
//[1, 3, 8, 4]
concat
演算は配列を結合し、新しい配列を返すために使用されます。arr.concat()
ここには、わずか 1 行のコードで簡単に配列をコピーできるshow 操作があります。
ソートソート
var arr =[1, 3, 8, 4]
arr.sort((a, b) = >a > b)
console.log(arr)
// Prints:
// [1, 3, 4, 8]
sort は配列をソートし、コールバック関数を受け入れます。関数のパラメータは配列内の 2 つの連続する項目です。上記のコードは同様にバブル ソートを実装し、位置を変更する必要があるかどうかを判断
true false
するために
他の操作
//shift:删除原数组第一项,并返回删除元素的值;如果数组为空则返回undefined
//unshift:将参数添加到原数组开头,并返回数组的长度
//pop:删除原数组最后一项,并返回删除元素的值;如果数组为空则返回undefined
//push:将参数添加到原数组末尾,并返回数组的长度
//reverse:将数组反序
//splice(start,deleteCount,val1,val2,...):从start位置开始删除deleteCount项,并从该位置起插入val1,val2,...
//slice(start,end):返回从原数组中指定开始下标到结束下标之间的项组成的新数组
//join(separator):将数组的元素组起一个字符串,以separator为分隔符,省略的话则用默认用逗号为分隔符
//some(),every()判断数组中是否存在满足条件的值,前者有一个为true则返回true,后者所有未true才返回true,有点像&&和||。
//这里写一个数组比较的问题
[]==[]
//prints:false
var a1 =[1, 2, 3]
var a2 =[1, 2, 3]
a1.toString() == a2.toString()
//prints:true
//上面的方式巧妙的避开了大量代码来判断数组是否相同
オブジェクトの操作
var map1 ={name: 'jack',age: 21,sex: '0'}
var map2 ={phone: '123456'}
var map3 =Object.assign(map1, map2)
var arr =Object.keys(map1)
console.log(arr)
console.log(map3)
//prints:
//["name", "age", "sex"]
//{name: "jack", age: 21, sex: "0", phone: "123456"}
Object.keys
このメソッドはkey
オブジェクトの配列を形成でき、配列を取得したら、forEach
他のメソッドを使用してオブジェクトを走査できることがわかります。Object.assign
n 個のオブジェクトのプロパティを結合することができ、後のプロパティが前のプロパティを上書きし、最終的に新しいオブジェクトが取得されます。これら 2 つの es6 メソッドは非常に実用的です。
Java 列挙型 (enum)
Java 列挙は特別なクラスであり、通常、1 年の 4 つの季節、1 年の 12 か月、1 週間の 7 日、東、西、北などの方向などの一連の定数を表します。
Java 列挙クラスは enum キーワードを使用して定義され、各定数はカンマで区切られます。
たとえば、色の列挙クラスを定義します。
enum Color
{
RED, GREEN, BLUE;
}
上記の列挙クラス Color の色定数には、それぞれ赤、緑、青を表す RED、GREEN、BLUE が含まれます。
使用例:
例
enum 色
{ 赤、緑、青; }
public class Test
{ // 実行出力public static void main(String[] args) { Color c1 = Color.RED; System.out.println(c1); } }
上記のコードを実行すると、出力は次のようになります。
RED
内部クラスでの列挙型の使用
列挙型クラスは内部クラスでも宣言できます。
例
public class Test
{ enum Color { RED、GREEN、BLUE; }
// 実行出力
public static void main(String[] args)
{ Color c1 = Color.RED; System.out.println(c1); } }
上記のコードを実行すると、出力は次のようになります。
RED
各列挙はクラスを通じて内部的に実装され、すべての列挙値は public static Final です。
上記の列挙型クラスの Color 変換は、内部クラスに実装されています。
class Color
{
public static final Color RED = new Color();
public static final Color BLUE = new Color();
public static final Color GREEN = new Color();
}
列挙要素を反復処理する
列挙の要素は、for ステートメントを使用して反復できます。
例
enum 色
{ 赤、緑、青; public class MyClass { public static void main(String[] args) { for (Color myVar : Color.values()) { System.out.println(myVar); } } } }
上記のコードを実行すると、出力は次のようになります。
RED
GREEN
BLUE
スイッチで enum クラスを使用する
列挙型クラスは、switch ステートメントでよく使用されます。
例
enum 色
{ 赤、緑、青; } public class MyClass { public static void main(String[] args) { Color myVar = Color.BLUE;
switch(myVar) { case RED: System.out.println("Red");ブレーク; case GREEN: System.out.println("Green");ブレーク; case BLUE: System.out.println("Blue" ) ;ブレーク; } } }
上記のコードを実行すると、出力は次のようになります。
蓝色
value()、ordinal()、および valueOf() メソッド
enum によって定義された列挙クラスは、デフォルトで java.lang.Enum クラスを継承し、java.lang.Serializable および java.lang.Comparable インターフェイスを実装します。
value()、ordinal()、および valueOf() メソッドは、java.lang.Enum クラスにあります。
- value() は列挙クラス内のすべての値を返します。
- ordinal() メソッドは、配列インデックスと同様に、各列挙定数のインデックスを見つけます。
- valueOf() メソッドは、指定された文字列値の列挙定数を返します。
例
enum 色
{ 赤、緑、青; }
public class Test
{ public static void main(String[] args) { // 値() Color[] arr = Color.values();
// 列挙
を繰り返します (Color col : arr)
{ // インデックスを表示しますSystem.out.println(col + " at Index " +col.ordinal()); }
// valueOf() を使用して列挙定数を返します。列挙定数が存在しない場合は、IllegalArgumentException が報告されます
System.out.println(Color.valueOf("RED"));
// System.out.println(Color.valueOf) ("白")) ;
}
}
上記のコードを実行すると、出力は次のようになります。
RED at index 0
GREEN at index 1
BLUE at index 2
RED
enum クラスのメンバー
列挙型では通常のクラスと同様に独自の変数、メソッド、コンストラクターを使用できますが、コンストラクターはプライベート アクセス修飾子のみを使用できるため、外部から呼び出すことはできません。
列挙には、具体的なメソッドと抽象的なメソッドの両方を含めることができます。enum クラスに抽象メソッドがある場合、enum クラスのすべてのインスタンスはそれを実装する必要があります。
例
enum 色
{ 赤、緑、青;
// コンストラクター
private Color()
{ System.out.println("コンストラクターが呼び出されました: " + this.toString()); }
public void colorInfo()
{ System.out.println("ユニバーサルカラー"); } }
public class Test
{ // 出力public static void main(String[] args) { Color c1 = Color.RED; System.out.println(c1); c1.colorInfo(); } }
上記のコードを実行すると、出力は次のようになります。
Constructor called for : RED
Constructor called for : GREEN
Constructor called for : BLUE
RED
Universal Color
要約する
配列は JavaScript でよく使われる配列型であり、多くの演算があり、適切な方法を選択することでプログラムのパフォーマンスとコードの可読性を向上させることができます。一部の機能は es6 でのみ利用できるため、ここでは説明しません。また、具体的な動作パフォーマンスの比較は行いません。