différents types d'array

Transcription

différents types d'array
D i f f é r e n t s T y p e s d ' a r r ays
( objets semblables aux tableaux)
J AVA S C R I P T (Programmation Internet) VO L . X X I I
J.B. Dadet DIASOLUKA Luyalu Nzoyifuanga
+243 - 851278216 - 899508675 - 995624714 - 902263541 - 813572818
[email protected]
Qu’est-ce qui se passe quand vous appliquez un « OR binaire » par
exemple au nombre « 3000000000.1 » comme ceci :
3000000000.1 | 0
?
Ça donnera
3000000000.1 | 0 = -1294967296
Vous y comprenez quelque chose ? Le code ci-après vous l’explique très
facilement grâce aux UintXArray, IntXArray, FloatXArray bref ce qui est
convenu d’appeler Typed Array.
Il existe en effet deux types fondamentaux d’Arrays : les Arrays ordinaires
et les ainsi dits « Typed Arrays » qui se rapportent aux nombres typés
dont BigInt et float32 selon le navigateur.
J.D.B. DIASOLUKA Nz. Luyalu
JavaScript Tome-XXII
LES « TYPED ARRAYS » :
D’abord il faut savoir que « TypedArray » n’est pas un type de données ou
un objet défini, mais une appellation générique.
Les Typed Arrays (Arrays typés) traitent tous leurs éléments constitutifs
comme étant de leur propre type donc d’un même type, contrairement aux
Arrays ordinaires qui peuvent regrouper toute sorte de types. Les deux
groupes principaux d’Arrays typées sont :
I.
Pour les entiers (« int ») :
1. Les Arrays Signées ([Signed] Integer Arrays) dont les éléments
sont traités comme des nombres signés (le bit d’extrême
gauche étant considéré comme étant le flag du signe) : les
IntXArray
2. Les Arrays Non Signées (Unsigned Integer Arrays) dont tous
les bits sont considérés comme pondérant le nombre : les
UintXArray.
Dans les deux cas ci-dessus, « X » peut avoir l’une des valeurs suivantes :
8, 16, 32.
Dans le deuxième type (Arrays Non Signées [Unsigned Integer Arrays])
existe en outre un Typed Array « Uint8ClampedArray » dont les éléments
sont considérés comme étant des « entiers 8bits non signés » (de la taille
d’un octet) et dont la valeur est plafonnée à 255 : toute valeur d’élément
supérieur à 255 est automatiquement ramenée à 255.
Il n’existe pas encore le Int64Array ni le Uint64Array, mais certains browsers comme le Yandex Version 18.9.1.954 proposent les types BigInt64Array et BigUint64Array, qui n’existent pas dans Firefox Quantum
57.0.
Différents types d’Arrays
- 2/174 -
dimanche, 6. janvier 2019 (5:16 )
J.D.B. DIASOLUKA Nz. Luyalu
II.
JavaScript Tome-XXII
Pour les rationnels (« float ») il existe :
« Float32Array » et « Float64Array ».
<script type="text/javascript"> "use strict";
// let bI = BigInt(-1)
// Pour FIREFOX : ReferenceError:
// BigInt is not defined
test.html:6:7
// console.log("BigInt(-1) =",bI);
// let f32 = float32(-1)
// Pour FIREFOX : ReferenceError:
// float32 is not defined
// console.log("float32(-1) =",f32);
console.log(".!. ATTENTION .!.")
let m=3000000000.1
console.log(m+" | 0 = ", m | 0);
(function(){
let b=null;
console.log("Parce que En DOUBLE-WORD (32 bits) : ")
console.log(m +"d = "+ (b=m.toString(2))+"b");
console.log("10110010110100000101111000000000b =");
console.log(
"1011'0010''1101'0000'''0101'1110''0000'0000b = ",
m|0 + "d");
console.log(
"Notez le bit (ou flag) du signe qui est à 1.");
}
)();
console.log("".padEnd(3,"\n"));
console.log("ES10 n'utilise pas encore le 64 bits : ")
m=new Uint8Array ([3000000000.1])
console.log("Uint8Array ([30000000000.1]) = "+m.toString());
m=new Uint16Array ([3000000000.1])
Différents types d’Arrays
- 3/174 -
dimanche, 6. janvier 2019 (5:16 )
J.D.B. DIASOLUKA Nz. Luyalu
JavaScript Tome-XXII
console.log(
"Uint16Array ([30000000000.1]) = "+m.toString());
m=new Uint32Array ([3000000000.1])
console.log(
"Uint32Array ([30000000000.1]) = "+m.toString());
console.log("");
m=new Uint8ClampedArray ([3000000000.1])
console.log(
"Uint8ClampedArray ([30000000000.1]) = "+m.toString());
console.log("");
m=new Int8Array ([3000000000.1])
console.log("Int8Array ([30000000000.1]) = "+m.toString());
m=new Int16Array ([3000000000.1])
console.log("Int16Array ([30000000000.1]) = "+m.toString());
m=new Int32Array ([3000000000.1])
console.log("Int32Array ([30000000000.1]) = "+m.toString());
console.log("");
m=new Float32Array ([3000000000.1])
console.log(
"Float32Array ([30000000000.1]) = "+m.toString());
m=new Float64Array ([3000000000.1])
console.log(
"Float64Array ([30000000000.1]) = "+m.toString());
console.log("");
//
m=new BigInt64Array ([3000000000])
// Pour FIREFOX : ReferenceError:
// BigInt64Array is not defined
//
console.log("BigInt64Array ([30000000000]) = "+m.toStrin
g());
//
m=new BigUint64Array ([3000000000])
Différents types d’Arrays - 4/174 - dimanche, 6. janvier 2019 (5:16 )
J.D.B. DIASOLUKA Nz. Luyalu
JavaScript Tome-XXII
// Pour FIREFOX :ReferenceError:
// BigUint64Array is not defined
//
console.log("BigUint64Array ([30000000000]) = "+m.toStri
ng());
</script>
Exécution avec YANDEX :
test.html:5
BigInt(-1) = -1n
test.html:12 .!. ATTENTION .!.
test.html:14 3000000000.1 | 0 =
-1294967296
test.html:18 Parce que En DOUBLE-WORD (32 bits) :
test.html:19 3000000000.1d =
10110010110100000101111000000000.000110011001100110011b
test.html:20 10110010110100000101111000000000b =
test.html:21
1011'0010''1101'0000'''0101'1110''0000'0000b =
-1294967296
test.html:24 Notez le bit (ou flag) du signe qui est à 1.
test.html:30
test.html:31 ES10 n'utilise pas encore le 64 bits :
test.html:34 Uint8Array ([30000000000.1]) = 0
test.html:37 Uint16Array ([30000000000.1]) = 24064
test.html:40 Uint32Array ([30000000000.1]) = 3000000000
test.html:42
test.html:45 Uint8ClampedArray ([30000000000.1]) = 255
test.html:47
test.html:50 Int8Array ([30000000000.1]) = 0
test.html:53 Int16Array ([30000000000.1]) = 24064
test.html:56 Int32Array ([30000000000.1]) = -1294967296
test.html:58
test.html:61 Float32Array ([30000000000.1]) = 3000000000
Différents types d’Arrays - 5/174 - dimanche, 6. janvier 2019 (5:16 )
J.D.B. DIASOLUKA Nz. Luyalu
JavaScript Tome-XXII
test.html:64 Float64Array ([30000000000.1]) = 3000000000.1
Exécution avec FIREFOX :
.!. ATTENTION .!.
3000000000.1 | 0 =
test.html:12:3
-1294967296
test.html:14:3
Parce que En DOUBLE-WORD (32 bits) :
test.html:18:8
3000000000.1d =
10110010110100000101111000000000.000110011001100110011b
10110010110100000101111000000000b =
1011'0010''1101'0000'''0101'1110''0000'0000b =
-1294967296
Notez le bit (ou flag) du signe qui est à 1.
test.html:21:8
ES10 n'utilise pas encore le 64 bits :
test.html:31:4
Uint8Array ([30000000000.1]) = 0
Uint16Array ([30000000000.1]) = 24064
Uint32Array ([30000000000.1]) = 3000000000
test.html:34:4
test.html:37:4
test.html:40:4
Uint8ClampedArray ([30000000000.1]) = 255
test.html:45:4
Int8Array ([30000000000.1]) = 0
Int16Array ([30000000000.1]) = 24064
Int32Array ([30000000000.1]) = -1294967296
test.html:50:4
test.html:53:4
test.html:56:4
Float32Array ([30000000000.1]) = 3000000000 test.html:61:4
Float64Array ([30000000000.1]) = 3000000000.1
test.html:64:4
Les UintxArray et IntxArray sont des exemples d’Arrays qui signifient en
l’occurrence « Unsigned Integer xBytes Array » ou « Array d’entiers NonSignés à x Bytes », et « [Signed] Integer xBytes Array » ou « Array
d’entiers Signés à x Bytes », x étant un nombre parmi ceux-ci : 8 , 16 ou 32.
Différents types d’Arrays
- 6/174 -
dimanche, 6. janvier 2019 (5:16 )
J.D.B. DIASOLUKA Nz. Luyalu
JavaScript Tome-XXII
TypedArray objects
Type
Value
Range
Size
in
byte
s
Description
Web IDL
type
Equivalent C
type
byte
int8_t
Int8Array
-128 to
127
1
8-bit two's
complement
signed
integer
Uint8Array
0 to 255
1
8-bit unsigned
integer
octet
uint8_t
1
8-bit unsigned
integer
(clamped)
octet
uint8_t
short
int16_t
Uint8ClampedAr
ray
0 to 255
Int16Array
-32768 to
32767
2
16-bit
two's
complement
signed
integer
Uint16Array
0 to 65535
2
16-bit
unsigned
integer
unsigned
short
uint16_
t
Int32Array
21474836
48 to
21474836
47
4
32-bit
two's
complement
signed
integer
long
int32_t
Différents types d’Arrays
- 7/174 -
dimanche, 6. janvier 2019 (5:16 )
J.D.B. DIASOLUKA Nz. Luyalu
Uint32Array
0 to
42949672
95
JavaScript Tome-XXII
4
32-bit
unsigned
integer
unsigned
long
uint32_
t
4
32-bit
IEEE floati
ng point
number ( 7
significant
digits e.g.
1.1234567
)
unrestricted
float
float
8
64-bit
IEEE floating point
number
(16 significant digits
e.g.
1.123...15)
unrestricted
double
double
-
Float32Array
1.2x10
38
to
38
3.4x10
-
Float64Array
5.0x10
324
to
308
1.8x10
Pour connaître la taille en bytes d’une « TypedArray » il suffit d’utiliser la
propriété BYTES_PER_ELEMENT. Cette taille en bytes détermine la valeur du
plus grand nombre stockable dans chacun des éléments de l’Array (signé
ou pas) :
<script type="text/javascript">
console.log("Float32Array.BYTES_PER_ELEMENT ="+
Float32Array.BYTES_PER_ELEMENT);
console.log("Int8Array.BYTES_PER_ELEMENT ="+
Int8Array.BYTES_PER_ELEMENT);
console.log("Int16Array.BYTES_PER_ELEMENT ="+
Int16Array.BYTES_PER_ELEMENT);
console.log("Int32Array.BYTES_PER_ELEMENT ="+
Int32Array.BYTES_PER_ELEMENT);
console.log("Uint8Array.BYTES_PER_ELEMENT ="+
Uint8Array.BYTES_PER_ELEMENT);
console.log("Uint16Array.BYTES_PER_ELEMENT ="+
Uint16Array.BYTES_PER_ELEMENT);
Différents types d’Arrays
- 8/174 -
dimanche, 6. janvier 2019 (5:16 )
J.D.B. DIASOLUKA Nz. Luyalu
JavaScript Tome-XXII
console.log("Uint32Array.BYTES_PER_ELEMENT ="+
Uint32Array.BYTES_PER_ELEMENT);
console.log("Uint8ClampedArray.BYTES_PER_ELEMENT ="+
Uint8ClampedArray.BYTES_PER_ELEMENT);
</script>
Float32Array.BYTES_PER_ELEMENT
Int8Array.BYTES_PER_ELEMENT
Int16Array.BYTES_PER_ELEMENT
Int32Array.BYTES_PER_ELEMENT
Uint8Array.BYTES_PER_ELEMENT
Uint16Array.BYTES_PER_ELEMENT
Uint32Array.BYTES_PER_ELEMENT
Uint8ClampedArray.BYTES_PER_ELEMENT
=4
=1
=2
=4
=1
=2
=4
=1
test.html:2:5
test.html:4:5
test.html:6:5
test.html:8:5
test.html:10:5
test.html:12:5
test.html:14:5
test.html:16:5
MAXINT dans chaque taille de registre ou de la variable :
<script type="text/javascript">
console.log("1 Byte (BYTE)
:
0xF = 8 Bits) = ",
0xF.toString())
:
0xFF = 16 Bits) = ",
0xFF.toString())
console.log("4 Byte (DBLE WORD):
0xFFFF = 32 Bits) = ",
0xFFFF.toString())
console.log("2 Byte (WORD)
console.log("4 Byte (QUAD WORD): 0xFFFFFFFF = 64 Bits) = ",
0xFFFFFFFF.toString())
</script>
1 Byte (BYTE)
: 0xF
= 8 Bits)
2 Byte (WORD)
: 0xFF
= 16 Bits)
4 Byte (DBLE WORD): 0xFFFF
= 32 Bits)
4 Byte (QUAD WORD): 0xFFFFFFFF = 64 Bits)
test.html:11:5
Différents types d’Arrays
- 9/174 -
= 15
test.html:2:5
= 255 test.html:5:5
=65535 test.html:8:5
=4294967295
dimanche, 6. janvier 2019 (5:16 )
J.D.B. DIASOLUKA Nz. Luyalu
JavaScript Tome-XXII
Différence entre
<script type="text/javascript"> "use strict";
let arr =
new Int32Array([91,68,44,43,61,75,16,89,65,96]);
console.log("arr.BYTES_PER_ELEMENT=" ,
arr.BYTES_PER_ELEMENT);
console.log("arr.length =" ,
arr.length);
console.log("arr.byteLength =" ,
arr.byteLength);
</script>
arr.BYTES_PER_ELEMENT= 4
arr.length = 10
arr.byteLength = 40
test.html:4:4
test.html:7:4
test.html:10:4
Comment accéder individuellement aux éléments d’un Typed Array ?
Tout bonnement, exactement comme avec les Arrays ordinaires.
Mais les Typed Arrays sont des objets itérables, c’est-à-dire qu’on peut
aussi les parcourir avec la méthode « .next » de leur itérateur.
L’itérateur est retourné par les méthodes
« arr.entries() »
pour parcourir toutes les entries (labels ET valeurs) ou
« arr.keys() »
pour parcourir toutes les entries (labels) ou
«
arr.values()
»
Différents types d’Arrays
- 10/174 -
dimanche, 6. janvier 2019 (5:16 )
J.D.B. DIASOLUKA Nz. Luyalu
JavaScript Tome-XXII
pour parcourir seulement les valeurs (values).
<script type="text/javascript"> "use strict";
let t;
var arr = new Int32Array([
58,75,42,32,92,79,35,84,18,11
]);
console.log("Nos « entries » :");
var iterator = arr.entries();
t="";
for(let i=0; i<arr.length; i++){
t += iterator.next().value + " | ";
}
console.log(t);
console.log("".padEnd(25,"="));
console.log("Nos « keys » :");
var iterator = arr.keys();
t="";
for(let i=0; i<arr.length; i++){
t += iterator.next().value + " | ";
}
console.log(t);
console.log("".padEnd(25,"="));
console.log("Nos « values » :");
var iterator = arr.values();
Différents types d’Arrays
- 11/174 -
dimanche, 6. janvier 2019 (5:16 )
J.D.B. DIASOLUKA Nz. Luyalu
JavaScript Tome-XXII
t="";
for(let i=0; i<arr.length; i++){
t += iterator.next().value + " | ";
}
console.log(t);
console.log("".padEnd(25,"="));
t="";
for(let k=0,l=arr.length ; k<l ; k++){
t+="arr["+k+"] =" + arr[k] + " | ";
}
console.log(t);
</script>
Nos « entries » :
test.html:9:4
0,58 | 1,75 | 2,42 | 3,32 | 4,92 |
5,79 | 6,35 | 7,84 | 8,18 | 9,11 |
test.html:16:4
========================= test.html:19:1
Nos « keys » :
test.html:22:4
0 | 1 | 2 | 3 | 4 |
5 | 6 | 7 | 8 | 9 |
test.html:29:4
========================= test.html:32:1
Nos « values » :
test.html:35:4
58 | 75 | 42 | 32 | 92 |
79 | 35 | 84 | 18 | 11 |
test.html:42:4
========================= test.html:45:1
Différents types d’Arrays
- 12/174 -
dimanche, 6. janvier 2019 (5:16 )
J.D.B. DIASOLUKA Nz. Luyalu
arr[0]
arr[3]
arr[6]
arr[9]
=58
=32
=35
=11
JavaScript Tome-XXII
| arr[1] =75 | arr[2] =42 |
| arr[4] =92 | arr[5] =79 |
| arr[7] =84 | arr[8] =18 |
|
test.html:52:4
Un autre exemple :
<script type="text/javascript"> "use strict";
let it;
const arr = new Int32Array([65,48,91]);
console.log("Notre Array: arr =" ,
arr);
console.log("Notre Array: arr.toString() =" ,
arr.toString());
console.log("\n\nAvec la Boucle FOR :");
for(var i=0 , l=arr.length ; i<l ; i++){
console.log(arr[i]);
}
console.log("Hors liste :",arr[i]);
// Hors liste !
console.log("");
// Itérateurs d'un Typed Array
console.log("arr.entries() =", arr.entries());
console.log(
"arr.keys() =", arr.keys());
console.log( "arr.values() =", arr.values());
console.log("\n\narr.entries()");
it = arr.entries(); // Itérateur lié aux entries.
console.log(it);
for(i=0; i<arr.length; i++){
console.log("it.next().value=" ,
it.next().value);
}
console.log("Hors liste :",it.next().value);
Différents types d’Arrays
- 13/174 -
dimanche, 6. janvier 2019 (5:16 )
J.D.B. DIASOLUKA Nz. Luyalu
// Hors liste !
JavaScript Tome-XXII
console.log("\n\narr.keys()");
it = arr.entries(); // Itérateur lié aux entries.
console.log(it);
for(i=0; i<arr.length; i++){
console.log("it.next().value=" ,
it.next().value);
}
console.log("Hors liste :",it.next().value);
// Hors liste !
console.log("\n\narr.values()");
it = arr.values(); // Itérateur lié aux values.
console.log(it);
for(i=0; i<arr.length; i++){
console.log("it.next().value=" ,
it.next().value);
}
console.log("Hors liste :",it.next().value);
// Hors liste !
</script>
Notez la différence entre « arr.values() » qui donne accès à l’itérateur
connecté aux « values » des éléments du typed Array, et
« it.next().value » qui donne accès à une « value » précise.
Notez aussi que déclarer une Array « const » n’empêche pas de « jouer »
librement avec tous ses éléments.
Exécution du code ci-dessus :
Notre Array: arr = Int32Array(3) [ 65, 48, 91 ]
0: 65
1: 48
2: 91
buffer: ArrayBuffer { byteLength: 12 }
Différents types d’Arrays
- 14/174 -
test.html:4:4
dimanche, 6. janvier 2019 (5:16 )
J.D.B. DIASOLUKA Nz. Luyalu
JavaScript Tome-XXII
byteLength: 12
<prototype>: ArrayBufferPrototype { … }
byteLength: 12
byteOffset: 0
length: 3
<prototype>: Int32ArrayPrototype { … }
byteLength: Getter
constructor: function ArrayBuffer()
isView: function isView()
length: 1
name: "ArrayBuffer"
prototype: ArrayBufferPrototype { … }
byteLength: Getter
constructor: function ArrayBuffer()
slice: function slice()
Symbol(Symbol.toStringTag):
"ArrayBuffer"
<prototype>: Object { … }
__defineGetter__:
function __defineGetter__()
__defineSetter__:
function __defineSetter__()
__lookupGetter__:
function __lookupGetter__()
__lookupSetter__:
function __lookupSetter__()
constructor: function Object()
hasOwnProperty:
function hasOwnProperty()
isPrototypeOf:
function isPrototypeOf()
propertyIsEnumerable:
function propertyIsEnumerable()
toLocaleString:
function toLocaleString()
toSource: function toSource()
toString: function toString()
valueOf: function valueOf()
Symbol(Symbol.species): Getter
<prototype>: function ()
apply: function apply()
arguments: null
bind: function bind()
Différents types d’Arrays - 15/174 - dimanche, 6. janvier 2019 (5:16 )
J.D.B. DIASOLUKA Nz. Luyalu
JavaScript Tome-XXII
call: function call()
caller: null
constructor: function Function()
length: 0
name: ""
toSource: function toSource()
toString: function toString()
Symbol(Symbol.hasInstance):
function Symbol.hasInstance()
<prototype>: Object { … }
__defineGetter__:
function __defineGetter__()
__defineSetter__:
function __defineSetter__()
__lookupGetter__:
function __lookupGetter__()
__lookupSetter__:
function __lookupSetter__()
constructor: function Object()
hasOwnProperty:
function hasOwnProperty()
isPrototypeOf:
function isPrototypeOf()
propertyIsEnumerable:
function propertyIsEnumerable()
toLocaleString:
function toLocaleString()
toSource: function toSource()
toString: function toString()
valueOf: function valueOf()
slice: function slice()
Différents types d’Arrays - 16/174 - dimanche, 6. janvier 2019 (5:16 )
J.D.B. DIASOLUKA Nz. Luyalu
JavaScript Tome-XXII
Symbol(Symbol.toStringTag): "ArrayBuffer"
<prototype>: Object { … }
byteLength: 12
byteOffset: 0
length: 3
<prototype>: Int32ArrayPrototype { … }
BYTES_PER_ELEMENT: 4
constructor: function Int32Array()
<prototype>: ??? { … }
buffer: Getter
byteLength: Getter
byteOffset: Getter
constructor: function TypedArray()
copyWithin: function copyWithin()
entries: function entries()
every: function every()
fill: function fill()
filter: function filter()
find: function find()
findIndex: function findIndex()
forEach: function forEach()
includes: function includes()
indexOf: function indexOf()
join: function join()
keys: function keys()
lastIndexOf: function lastIndexOf()
length: Getter
map: function map()
reduce: function reduce()
reduceRight: function reduceRight()
reverse: function reverse()
set: function set()
slice: function slice()
some: function some()
sort: function sort()
subarray: function subarray()
toLocaleString:
function toLocaleString()
toString: function toString()
values: function values()
Symbol(Symbol.iterator):
function values()
Symbol(Symbol.toStringTag): Getter
Différents types d’Arrays - 17/174 - dimanche, 6. janvier 2019 (5:16 )
J.D.B. DIASOLUKA Nz. Luyalu
JavaScript Tome-XXII
<prototype>: Object { … }
Notre Array: arr.toString() = 65,48,91
test.html:7:4
Avec la Boucle FOR :
65
48
91
Hors liste : undefined
test.html:10:4
test.html:12:7
test.html:12:7
test.html:12:7
test.html:14:4
arr.entries() = Array Iterator { }
test.html:20:4
<prototype>: Array Iterator
next: function next()
Symbol(Symbol.toStringTag): "Array Iterator"
<prototype>: Object { … }
Symbol(Symbol.iterator):
function Symbol.iterator()
<prototype>: Object { … }
arr.keys() = Array Iterator { }
test.html:21:4
<prototype>: Array Iterator
next: function next()
Symbol(Symbol.toStringTag): "Array Iterator"
<prototype>: Object { … }
Symbol(Symbol.iterator):
function Symbol.iterator()
<prototype>: Object { … }
arr.values() = Array Iterator { }
test.html:22:4
<prototype>: Array Iterator
next: function next()
Symbol(Symbol.toStringTag): "Array Iterator"
<prototype>: Object { … }
Symbol(Symbol.iterator):
function Symbol.iterator()
Différents types d’Arrays
- 18/174 -
dimanche, 6. janvier 2019 (5:16 )
J.D.B. DIASOLUKA Nz. Luyalu
JavaScript Tome-XXII
<prototype>: Object { … }
arr.entries()
Array Iterator { }
test.html:25:4
test.html:27:4
it.next().value= Array [ 0, 65 ]
(2) […]
0: 0
1: 65
length: 2
<prototype>: Array []
test.html:30:7
it.next().value= Array [ 1, 48 ]
it.next().value= Array [ 2, 91 ]
Hors liste : undefined
test.html:30:7
test.html:30:7
test.html:33:4
arr.keys()
Array Iterator { }
it.next().value= Array [ 0, 65 ]
it.next().value= Array [ 1, 48 ]
it.next().value= Array [ 2, 91 ]
Hors liste : undefined
test.html:37:4
test.html:39:4
test.html:42:7
test.html:42:7
test.html:42:7
test.html:45:4
arr.values()
Array Iterator { }
it.next().value= 65
it.next().value= 48
it.next().value= 91
Hors liste : undefined
test.html:49:4
test.html:51:4
test.html:54:7
test.html:54:7
test.html:54:7
test.html:57:4
Combien de fois un élément se retrouve dans une Typed Array ?
La solution, avec une fonction CALLBACK, en l’occurrence
« r = Array . filter ( fc ); »
Différents types d’Arrays
- 19/174 -
dimanche, 6. janvier 2019 (5:16 )
J.D.B. DIASOLUKA Nz. Luyalu
JavaScript Tome-XXII
<script type="text/javascript"> "use strict";
let Max=0, r, ref, eg=[] , c=[], n=0, tot=0;
const ar = new Int32Array([
15,17,12,10,14,15,12,11,10,16,
20,11,14,20,17,19,13,11,19,20,
15,17,18,17,18,17,15,13,15,15,
11,13,16,17,16,20,14,10,20,14,
20,16,17,14,15,18,13,20,18,18
]);
for(let k=0,l=ar.length ; k<l ; k++){
Max = Math.max (Max, ar[k]);
c[k]=0;
}
console.log("TypedArray initiale: "+ar);
console.log("");
let fc = (element, index, array) =>
element==ref;
console.log("Les éléments égaux : ");
for(let k=0,l=ar.length ; k<l ; k++){
ref = ar[k];
r = ar.filter(fc);
console.log(
String(k).padStart(3," ") ,
" : " , r);
eg[r[0]]=r[0];c[r[0]]+=1;
}
let t="";
for(let k=0,l=ar.length ; k<=Max ; k++){
if(eg[k]) {
Différents types d’Arrays
- 20/174 -
dimanche, 6. janvier 2019 (5:16 )
J.D.B. DIASOLUKA Nz. Luyalu
JavaScript Tome-XXII
t+=eg[k]+" ["+c[k]+"×] | ";
n++; tot+=c[k]
}
}
console.log(t);
console.log("Un Total de",tot,"nombres,");
console.log("dont",n,"différents.");
</script>
TypedArray initiale:
15,17,12,10,14,15,12,11,10,16,20,11,14,20,17,19,13,11,19,20,15,
17,18,17,18,17,15,13,15,15,11,13,16,17,16,20,14,10,20,14,20,16,
17,14,15,18,13,20,18,18
test.html:16:4
Les éléments égaux :
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
:
:
:
:
:
:
:
:
:
:
:
:
:
:
:
:
:
:
:
:
:
:
:
Int32Array(7)
Int32Array(7)
Int32Array
Int32Array(3)
Int32Array(5)
Int32Array(7)
Int32Array
Int32Array(4)
Int32Array(3)
Int32Array(4)
Int32Array(7)
Int32Array(4)
Int32Array(5)
Int32Array(7)
Int32Array(7)
Int32Array
Int32Array(4)
Int32Array(4)
Int32Array
Int32Array(7)
Int32Array(7)
Int32Array(7)
Int32Array(5)
[
[
[
[
[
[
[
[
[
[
[
[
[
[
[
[
[
[
[
[
[
[
[
test.html:23:4
15,
17,
12,
10,
14,
15,
12,
11,
10,
16,
20,
11,
14,
20,
17,
19,
13,
11,
19,
20,
15,
17,
18,
Différents types d’Arrays
15, 15, 15, 15, 15,
17, 17, 17, 17, 17,
12 ]
10, 10 ]
14, 14, 14, 14 ]
15, 15, 15, 15, 15,
12 ]
11, 11, 11 ]
10, 10 ]
16, 16, 16 ]
20, 20, 20, 20, 20,
11, 11, 11 ]
14, 14, 14, 14 ]
20, 20, 20, 20, 20,
17, 17, 17, 17, 17,
19 ]
13, 13, 13 ]
11, 11, 11 ]
19 ]
20, 20, 20, 20, 20,
15, 15, 15, 15, 15,
17, 17, 17, 17, 17,
18, 18, 18, 18 ]
- 21/174 -
15 ]
17 ]
15 ]
20 ]
20 ]
17 ]
20 ]
15 ]
17 ]
dimanche, 6. janvier 2019 (5:16 )
J.D.B. DIASOLUKA Nz. Luyalu
23 : Int32Array(7) [ 17,
24 : Int32Array(5) [ 18,
25 : Int32Array(7) [ 17,
26 : Int32Array(7) [ 15,
27 : Int32Array(4) [ 13,
28 : Int32Array(7) [ 15,
29 : Int32Array(7) [ 15,
30 : Int32Array(4) [ 11,
31 : Int32Array(4) [ 13,
32 : Int32Array(4) [ 16,
33 : Int32Array(7) [ 17,
34 : Int32Array(4) [ 16,
35 : Int32Array(7) [ 20,
36 : Int32Array(5) [ 14,
37 : Int32Array(3) [ 10,
38 : Int32Array(7) [ 20,
39 : Int32Array(5) [ 14,
40 : Int32Array(7) [ 20,
41 : Int32Array(4) [ 16,
42 : Int32Array(7) [ 17,
43 : Int32Array(5) [ 14,
44 : Int32Array(7) [ 15,
45 : Int32Array(5) [ 18,
46 : Int32Array(4) [ 13,
47 : Int32Array(7) [ 20,
48 : Int32Array(5) [ 18,
49 : Int32Array(5) [ 18,
17,
18,
17,
15,
13,
15,
15,
11,
13,
16,
17,
16,
20,
14,
10,
20,
14,
20,
16,
17,
14,
15,
18,
13,
20,
18,
18,
17, 17, 17, 17,
18, 18, 18 ]
17, 17, 17, 17,
15, 15, 15, 15,
13, 13 ]
15, 15, 15, 15,
15, 15, 15, 15,
11, 11 ]
13, 13 ]
16, 16 ]
17, 17, 17, 17,
16, 16 ]
20, 20, 20, 20,
14, 14, 14 ]
10 ]
20, 20, 20, 20,
14, 14, 14 ]
20, 20, 20, 20,
16, 16 ]
17, 17, 17, 17,
14, 14, 14 ]
15, 15, 15, 15,
18, 18, 18 ]
13, 13 ]
20, 20, 20, 20,
18, 18, 18 ]
18, 18, 18 ]
JavaScript Tome-XXII
17 ]
17 ]
15 ]
15 ]
15 ]
17 ]
20 ]
20 ]
20 ]
17 ]
15 ]
20 ]
10 [3×] | 11 [4×] | 12 [2×] | 13 [4×] |
14 [5×] | 15 [7×] | 16 [4×] | 17 [7×] |
18 [5×] | 19 [2×] | 20 [7×] |
test.html:43:4
Un Total de 50 nombres,
dont 11 différents.
test.html:44:4
test.html:45:4
Les Arrays typées peuvent être parcourues soit avec une boucle ordinaire
( for... el [ idx ] ) soit avec une itérateur :
<script type="text/javascript">
Différents types d’Arrays
- 22/174 -
"use strict";
dimanche, 6. janvier 2019 (5:16 )
J.D.B. DIASOLUKA Nz. Luyalu
JavaScript Tome-XXII
let t;
var ar = new Uint32Array(
[30, 38, 95, 66, 69, 15, 76, 10, 92, 99 ]
);
console.log(ar);
console.log("".padEnd(25,"="));
t="";
for(let i=0 ; i < ar.length ; i++){
t += ar[i]+" | "
}
console.log(t);
console.log("".padEnd(25,"="));
var s = ar.subarray(3, 8);
console.log("La Nouvelle Uint32Array : ");
console.log(s);
console.log("".padEnd(25,"="));
t="";
var iterator = s.values();
for(let i=0 ; i < s.length ; i++){
t += iterator.next().value + " | ";
}
console.log(t);
</script>
Différents types d’Arrays
- 23/174 -
dimanche, 6. janvier 2019 (5:16 )
J.D.B. DIASOLUKA Nz. Luyalu
JavaScript Tome-XXII
Uint32Array(10) [ 30, 38, 95, 66, 69, 15, 76, 10, 92, 99 ]
test.html:7:5
=========================
test.html:10:1
30 | 38 | 95 | 66 | 69 | 15 | 76 | 10 | 92 | 99 |
test.html:17:5
=========================
test.html:21:1
La Nouvelle Uint32Array :
test.html:25:5
Uint32Array(5) [ 66, 69, 15, 76, 10 ]
test.html:26:5
=========================
test.html:30:1
66 | 69 | 15 | 76 | 10 |
test.html:38:5
La méthode « typedArray1 . set ( typedArray2 , pos ) » remplace les éléments de la TypedArray1 par ceux de la TypedArray2 à partir de la positon « p » dans la TypedArray1. Cette méthode n’est pas disponible avec
l’objet Array.
<script type="text/javascript">
const ar1 =
new Uint16Array([77,33,44,88,11,55,66,22,00,99 ]);
console.log("Array initiale:\n"+ar1);
console.log("Initial length ="+ar1.length);
console.log("");
const ar2 =
new Uint32Array([600,680,650 ]);
console.log("Ar1:\n"+ar1);
console.log("Ar2:\n"+ar2);
Différents types d’Arrays
- 24/174 -
dimanche, 6. janvier 2019 (5:16 )
J.D.B. DIASOLUKA Nz. Luyalu
JavaScript Tome-XXII
ar1.set(ar2, 3);
console.log("ar1.set(ar2, 3) =\n"+ar1);
console.log("Final length ="+ar1.length);
console.log("");
console.log("");
const ar3 =
new Uint8ClampedArray([20,50,30 ]);
console.log("Ar1:\n"+ar1);
console.log("Ar3:\n"+ar3);
ar1.set(ar3, 5);
console.log("ar1.set(ar3, 5) =\n"+ar1);
console.log("Final length ="+ar1.length);
console.log("");
const ar4 =
new Uint8ClampedArray([700,750,720 ]);
console.log("Ar1:\n"+ar1);
console.log("Ar4:\n"+ar4);
ar1.set(ar4, 6);
console.log("ar1.set(ar4, 6) =\n"+ar1);
console.log("Final length ="+ar1.length);
</script>
Array initiale: 77,33,44,88,11,55,66,22,0,99 test.html:4:3
Initial length =10
test.html:5:3
Ar1: 77,33,44,88,11,55,66,22,0,99
test.html:11:3
Ar2: 600,680,650
test.html:12:3
ar1.set(ar2, 3) = 77,33,44,600,680,650,66,22,0,99
Final length =10
test.html:15:3
Ar1: 77,33,44,600,680,650,66,22,0,99
test.html:22:3
Ar3: 20,50,30
test.html:23:3
ar1.set(ar3, 5) = 77,33,44,600,680,20,50,30,0,99 test.html:25:3
Final length =10
test.html:26:3
Différents types d’Arrays - 25/174 - dimanche, 6. janvier 2019 (5:16 )
J.D.B. DIASOLUKA Nz. Luyalu
JavaScript Tome-XXII
Ar1: 77,33,44,600,680,20,50,30,0,99
test.html:32:3
Ar4: 255,255,255
test.html:33:3
ar1.set(ar4, 6) = 77,33,44,600,680,20,255,255,255,99
Final length =10
test.html:36:3
Remarquez ci-dessous que le nombre contenu dans un élément d’un
typedArray ne peut pas dépasser la valeur maximale autorisée pour la
taille en bits de ce type.
Ici const
ar1 = new Uint8Array([77,33,44,88,11,55,66,22,00,99 ]);
L’Array ar1 ne peut contenir que des entiers 8 bits non signés, donc sa
valeur maximale = 255. Tous les bits de gauche au-delà de la 8è case ou
position en comptant de la droite vers la gauche, sont ignorés.
Idem pour les autres tailles 16 bits et 32 bits (jusqu’aujourd’hui =samedi
17 novembre 2018 - 9:39:05 AM=, pas encore de 64 bits même avec le
ES10 ou Ecmascript 2019 [de l’année prochaine]).
Quant au Uint8ClampedArray
Ce sont des entiers non signés inférieurs à 255 et les valeurs supérieures
à 255 sont automatiquement ramenées à 255.
Il convient donc dès le départ de bien savoir avec quelles valeurs on aura
à travailler.
Voici comment le même programme que ci-dessus affiche avec
const ar1 = new Uint8Array
<script type="text/javascript">
const ar1 =
new Uint8Array([77,33,44,88,11,55,66,22,00,99 ]);
Différents types d’Arrays
- 26/174 -
dimanche, 6. janvier 2019 (5:16 )
J.D.B. DIASOLUKA Nz. Luyalu
JavaScript Tome-XXII
console.log("Array initiale:\n"+ar1);
console.log("Initial length ="+ar1.length);
console.log("");
const ar2 =
new Uint32Array([600,680,650 ]);
console.log("Ar1:\n"+ar1);
console.log("Ar2:\n"+ar2);
ar1.set(ar2, 3);
console.log("ar1.set(ar2, 3) =\n"+ar1);
console.log("Final length ="+ar1.length);
console.log("");
console.log("");
const ar3 =
new Uint8ClampedArray([20,50,30 ]);
console.log("Ar1:\n"+ar1);
console.log("Ar3:\n"+ar3);
ar1.set(ar3, 5);
console.log("ar1.set(ar3, 5) =\n"+ar1);
console.log("Final length ="+ar1.length);
console.log("");
const ar4 =
new Uint8ClampedArray([700,750,720 ]);
console.log("Ar1:\n"+ar1);
console.log("Ar4:\n"+ar4);
ar1.set(ar4, 6);
console.log("ar1.set(ar4, 6) =\n"+ar1);
console.log("Final length ="+ar1.length);
</script>
Array initiale: 77,33,44,88,11,55,66,22,0,99 test.html:4:3
Initial length =10
test.html:5:3
Différents types d’Arrays
- 27/174 -
dimanche, 6. janvier 2019 (5:16 )
J.D.B. DIASOLUKA Nz. Luyalu
JavaScript Tome-XXII
Ar1: 77,33,44,88,11,55,66,22,0,99
test.html:11:3
Ar2: 600,680,650
test.html:12:3
ar1.set(ar2, 3) = 77,33,44,88,168,138,66,22,0,99 test.html:14:3
Final length =10
test.html:15:3
Ar1: 77,33,44,88,168,138,66,22,0,99
test.html:22:3
Ar3: 20,50,30
test.html:23:3
ar1.set(ar3, 5) = 77,33,44,88,168,20,50,30,0,99 test.html:25:3
Final length =10
test.html:26:3
Ar1: 77,33,44,88,168,20,50,30,0,99
test.html:32:3
Ar4: 255,255,255
test.html:33:3
ar1.set(ar4, 6) = 77,33,44,88,168,20,255,255,255,99
Final length =10
test.html:36:3
La méthode « . slice ( 2 , 7 ) » avec les arrays typées :
Retourne une Array copie de l’Array source à partir de l’indice 2 inclus
jusqu’à 7 exclu (à compter de zéro) [ 2 – 7 [ sans modifier l’Array initiale.
<script type="text/javascript">
var arr1 = new Int32Array([44,16,38,28,40,21,75,77,28,87]);
console.log("Array initiale arr1 = ",arr1);
console.log("");
console.log("arr1.slice(2, 7) = ",arr1.slice(2, 7));
console.log("arr1 = ",arr1);
</script>
Array initiale arr1 =
Int32Array(10) [ 44, 16, 38, 28, 40, 21, 75, 77, 28, 87 ]
test.html:3:4
arr1.slice(2, 7) =
Int32Array(5) [ 38, 28, 40, 21, 75 ]
test.html:5:4
Différents types d’Arrays
- 28/174 -
dimanche, 6. janvier 2019 (5:16 )
J.D.B. DIASOLUKA Nz. Luyalu
JavaScript Tome-XXII
arr1 =
Int32Array(10) [ 44, 16, 38, 28, 40, 21, 75, 77, 28, 87 ]
test.html:6:4
Pour accéder à un élément de l’Array à partir de la fin, on utilise des index
négatifs comme premier argument de « .slice ».
« .slice » retournant une Array, on peut facilement accéder aux premiers et
derniers éléments d’une quelconque Array par indexage des éléments
d’une Array retournée avec « .slice » en partant soit du premier élément de
l’Array source, soit du dernier élément (indice -1). Par exemple, pour avoir
le Nième élément de l’Array, on peut écrire ceci :
Pour avoir le Nième élément d’une Array à partir du premier (indice =
zéro), de l’Array retournée par « .slice » ou une toute autre Array, on écrit
[plus lourd, mais facilite la compréhension] :
Array . slice ( 0 ) [ N ] , N compris entre [ 0 et Array.length-1 [.
Cette instruction retourne toute l’Array source, et retient l’élément à la
Nième position à partir de zéro, elle est donc équivalente à :
Array[0]
Pour accéder à un élément d’une Array à partir de la fin, on peut
écrire :
Array . slice ( N ) [ 0 ] , N doit être négatif, et -1 pour commencer le
compte par la fin, l’indice doit être toujours zéro.
Le résultat final dépend de l’instruction précise.
Différents types d’Arrays
- 29/174 -
dimanche, 6. janvier 2019 (5:16 )
J.D.B. DIASOLUKA Nz. Luyalu
JavaScript Tome-XXII
La méthode « Array . from ( ) » :
« Array . from ( ) » est une Array polymorphe qui retourne une nouvelle
Array ordonnée, constituée de tous les éléments d’une Array, un Set ou
une String sources.
Pour les « Sets », ces éléments sont retenus une et une seule fois au cas
où cet même élément se répète dans le « Set » source (c’est la définition
même de « Set » = jeu d’échantillons représentatifs).
Pour les Arrays sources, c’est le premier élément rencontré est retenu.
Pour les Hash (littéral d’objet), l’élément de l’indice en cours écrase éventuellement l’élément du même indice qui vient avant.
<script type="text/javascript"> "use strict";
const arr=[12, 10, 14, 12, 10, 12, 11, 12, 13, 12];
let r=Array.from( new Set( arr ));
console.log("Array Srce =", arr);
// Array Srce =
// Array(10) [ 12, 10, 14, 12, 10, 12, 11, 12, 13, 12 ]
console.log("Array Cible =", r);
// Array Cible =
// Array(5) [ 12, 10, 14, 11, 13 ]
</script>
Un autre exemple avec d’autres types comme source :
<script type="text/javascript"> "use strict";
let r;
// Array.from avec ARRAY :
//
Elle prend tout même les doublons.
r = Array.from(
[6, 13, 8, 11, 8, 6, 7, 15, 7, 13]
Différents types d’Arrays
- 30/174 -
dimanche, 6. janvier 2019 (5:16 )
J.D.B. DIASOLUKA Nz. Luyalu
JavaScript Tome-XXII
);
console.log(typeof r , r )
// object
// Array(10) [ 6, 13, 8, 11, 8, 6, 7, 15, 7, 13 ]
// Array.from avec TYPED ARRAY :
//
Elle prend tout même les doublons.
r = Array.from(
new Uint8ClampedArray(
[9, 12, 11, 8, 6, 11, 7, 11, 14, 6]
)
);
console.log(typeof r , r )
// object
// Array(10) [ 9, 12, 11, 8, 6, 11, 7, 11, 14, 6 ]
// Array.from avec SET:
//
Elle prend tout quand ils sont uniques.
r = Array.from( new Set(
[25, 73, 100, 12, 39, 17, 75, 16, 96, 94])
);
console.log(typeof r , r )
// object
// (10) [25, 73, 100, 12, 39, 17, 75, 16, 96, 94]
// Array.from avec SET :
//
Il ne retient pas les doublons.
r = Array.from( new Set(
[14, 11, 12, 13, 12, 11, 11, 12, 11, 10])
);
console.log(typeof r , r )
// object
// Array(5) [ 14, 11, 12, 13, 10 ]
// Array.from avec HASH :
//
Elle prend la quantité spécifiée par length,
//
tous les indices de 0 à length-1, en ne
//
retenant que la valeur du dernier indice doublon.
r = Array.from(
Différents types d’Arrays - 31/174 - dimanche, 6. janvier 2019 (5:16 )
J.D.B. DIASOLUKA Nz. Luyalu
JavaScript Tome-XXII
{0: 86, 1: 16, 2:12, 3:49, 4:78, 5:60, length: 6}
);
console.log(typeof r , r )
// object
// (6) [86, 16, 12, 49, 78, 60]
// Array.from HASH :
//
Il prend la quantité spécifiée par length,
//
tous les indices de 0 à length-1.
r = Array.from(
{0:11, 1:10, 2:15, 3:11, 4:12, 5:11, length: 6}
);
console.log(typeof r , r )
// object
// Array(6) [ 11, 10, 15, 11, 12, 11 ]
// Array.from HASH :
//
Il prend la quantité spécifiée par length,
//
tous les indices de 0 à length-1.
r = Array.from(
{3:19, 1:17, 2:25, 3:12, 3:16, 0:11, 2:14, length: 6}
);
console.log(typeof r , r )
// object
// Array(6) [ 11, 17, 14, 16, undefined, undefined ]
// Array.from HASH
r = Array.from(
{0:86, 1:16, 2:12, 3:49, 4:78, 5:60, length: 3}
);
console.log(typeof r , r )
// object
// (3) [86, 16, 12]
// Array.from HASH
r = Array.from(
{0:86, 1:16, 2:12, 3:49, 4:78, 5:60, length: 8}
);
Différents types d’Arrays - 32/174 - dimanche, 6. janvier 2019 (5:16 )
J.D.B. DIASOLUKA Nz. Luyalu
JavaScript Tome-XXII
console.log(typeof r , r )
// object
// (8) [86, 16, 12, 49, 78, 60, undefined, undefined]
// Array.from HASH
r = Array.from(
{0:86, 1:16, annee:12, 3:49, 4:78, 5:60, length: 6}
);
console.log(typeof r , r )
// object
// (6) [86, 16, undefined, 49, 78, 60]
// Array.from HASH
r = Array.from(
{3:86, "1":16, 4:12, 0:49, "5":60, 2:78, length: 6}
);
console.log(typeof r , r )
// object
// (6) [49, 16, 78, 86, 12, 60]
// Array.from HASH
r = Array.from(
{5:86, 1:16, 7:12, 10:49, 3:78, 9:60, length: 6}
);
console.log(typeof r , r )
// object
// (6) [undefined, 16, undefined, 78, undefined, 86]
// Array.from HASH
r = Array.from(
{5:86, 1:16, 7:12, 10:49, 3:78, 9:60, length: 11}
);
console.log(typeof r , r )
// object
// (11) [undefined, 16, undefined, 78, undefined,
//
86, undefined, 12, undefined, 60, 49]
// Array.from HASH
Différents types d’Arrays
- 33/174 -
dimanche, 6. janvier 2019 (5:16 )
J.D.B. DIASOLUKA Nz. Luyalu
JavaScript Tome-XXII
r = Array.from(
{3:22, 15:94, 8:65, 0:98, 11:48, length: 16}
);
console.log(typeof r , r )
// object
// (16) [98, undefined, undefined, 22, undefined,
//
undefined, undefined, undefined, 65, undefined,
// undefined, 48, undefined, undefined, undefined, 94]
// Array.from HASH
r = Array.from(
{1:22, 3:94, 5:65, 7:98, 9:20, 10:48, length: 5}
);
console.log(typeof r , r )
// object
// (5) [undefined, 22, undefined, 94, undefined]
console.log("".padEnd(25,"="));
console.log("AVEC CALLBACK en 2è argument");
console.log("Pour appliquer un même TTT à "+
"chaque élément de l'Array");
console.log("=".repeat(25));
// Array.from STRING, avec pointeur sur fonction
// callback, ici le constructeur Number
r = Array.from('2018', Number);
console.log(typeof r , r )
// object
// (4) [2, 0, 1, 8]
// Array.from STRING, avec
//
fonction callback ordinaire et inline
r = Array.from('4239617508', function(e){
return e+" "+ !(e%3);
// divisible par (ou multiple de) 3 ?
});
console.log(typeof r , r )
// object
// (10) ["4 false", "2 false", "3 true",
Différents types d’Arrays - 34/174 - dimanche, 6. janvier 2019 (5:16 )
J.D.B. DIASOLUKA Nz. Luyalu
JavaScript Tome-XXII
// "9 true", "6 true", "1 false", "7 false",
// "5 false", "0 true", "8 false"]
</script>
Exécution avec Firefox :
object
Array(10) [ 6, 13, 8, 11, 8, 6, 7, 15, 7, 13 ]
test.html:9:4
object
Array(10) [ 9, 12, 11, 8, 6, 11, 7, 11, 14, 6 ]
test.html:21:4
object
Array(10) [ 25, 73, 100, 12, 39, 17, 75, 16, 96, 94 ]
test.html:31:4
object
Array(5) [ 14, 11, 12, 13, 10 ]
test.html:41:4
object
Array(6) [ 86, 16, 12, 49, 78, 60 ]
test.html:53:4
object
Array(6) [ 11, 10, 15, 11, 12, 11 ]
test.html:64:4
object
Array(6) [ 11, 17, 14, 16, undefined, undefined ]
test.html:76:4
object
Array(3) [ 86, 16, 12 ]
test.html:85:4
object
Array(8) [ 86, 16, 12, 49, 78, 60, undefined, undefined ]
test.html:94:4
Différents types d’Arrays
- 35/174 -
dimanche, 6. janvier 2019 (5:16 )
J.D.B. DIASOLUKA Nz. Luyalu
JavaScript Tome-XXII
object
Array(6) [ 86, 16, undefined, 49, 78, 60 ]
test.html:103:4
object
Array(6) [ 49, 16, 78, 86, 12, 60 ]
test.html:112:4
object
Array(6) [ undefined, 16, undefined, 78, undefined, 86 ]
test.html:121:4
object
Array(11) [ undefined, 16, undefined, 78, undefined, 86, undefined, 12, undefined, 60, … ]
test.html:130:4
object
Array(16) [ 98, undefined, undefined, 22, undefined, undefined,
undefined, undefined, 65, undefined, … ]
test.html:140:4
object
Array(5) [ undefined, 22, undefined, 94, undefined ]
test.html:151:4
========================= test.html:156:1
AVEC CALLBACK en 2è argument test.html:157:1
Pour appliquer un même TTT à chaque élément de l'Array
test.html:158:1
========================= test.html:160:1
object
Array(4) [ 2, 0, 1, 8 ]
test.html:166:4
object
Array(10) [ "4 false", "2 false", "3 true", "9 true", "6 true",
"1 false", "7 false", "5 false", "0 true", "8 false" ]
test.html:177:4
Différents types d’Arrays
- 36/174 -
dimanche, 6. janvier 2019 (5:16 )
J.D.B. DIASOLUKA Nz. Luyalu
JavaScript Tome-XXII
La méthode « Array . of ( ) » :
Retourne une Array à partir d’une liste d’éléments séparés par une virgule.
<script type="text/javascript"> "use strict";
let r;
r = Array.of(1);
console.log(typeof r);
console.log(r);
// =>
[1]
r = Array.of(10);
console.log(typeof r);
console.log(r);
// =>
[10]
r = Array.of(78, 90, 25, 33, 56, 36, 39, 96, 93, 35);
console.log(typeof r);
console.log(r);
// => (10) [78, 90, 25, 33, 56, 36, 39, 96, 93, 35]
r = Array.of("jour",23, "annee",2018, "mois",11,
{hr:8 , min:37});
console.log(typeof r);
console.log(r);
// => (10) [78, 90, 25, 33, 56, 36, 39, 96, 93, 35]
</script>
Avec Firefox :
Différents types d’Arrays
- 37/174 -
dimanche, 6. janvier 2019 (5:16 )
J.D.B. DIASOLUKA Nz. Luyalu
JavaScript Tome-XXII
Avec Yandex :
Différents types d’Arrays
- 38/174 -
dimanche, 6. janvier 2019 (5:16 )
J.D.B. DIASOLUKA Nz. Luyalu
Différents types d’Arrays
JavaScript Tome-XXII
- 39/174 -
dimanche, 6. janvier 2019 (5:16 )
J.D.B. DIASOLUKA Nz. Luyalu
JavaScript Tome-XXII
La boucle itératrice « for … of » des Arrays :
<script type="text/javascript"> "use strict";
let t;
var arr = ['oméga',27,3.14,{}];
t="";
for(const valeur of arr) t+=valeur+" | ";
console.log(t);
// oméga | 27 | 3.14 | [object Object] |
t="";
for(let
valeur of arr.values()) t+=valeur+" | ";
console.log(t);
// oméga | 27 | 3.14 | [object Object] |
t="";
for(var
cle of arr.keys()) t+=cle+" | ";
console.log(t);
// 0 | 1 | 2 | 3 |
t="";
for(let [cle, valeur] of arr.entries()){
t+="cle = "+cle+" , "+"valeur = "+valeur+" | ";
}
console.log(t);
// cle = 0 , valeur = oméga |
Différents types d’Arrays
- 40/174 -
dimanche, 6. janvier 2019 (5:16 )
J.D.B. DIASOLUKA Nz. Luyalu
// cle = 1 , valeur = 27 |
// cle = 2 , valeur = 3.14 |
// cle = 3 , valeur = [object Object] |
</script>
JavaScript Tome-XXII
Le code suivant donne le Nième élément d’une Array, en particulier le
premier et le dernier :
<script> "use strict";
let t;
var array = [17,32,68,90];
console.log(array);
console.log("".padEnd(25,"="))
t="";
for(let i=-2,l=array.length+3 ; i<l ; i++){
t+=array.slice(0)[i]+" | ";
}
console.log("t+=array.slice(0)[i]");
console.log(t);
console.log("".padEnd(25,"="))
t="";
for(let i=-2,l=array.length+3 ; i<l ; i++){
t+=array.slice(i)[0]+" | ";
}
console.log("t+=array.slice(i)[0]");
console.log(t);
Différents types d’Arrays
- 41/174 -
dimanche, 6. janvier 2019 (5:16 )
J.D.B. DIASOLUKA Nz. Luyalu
console.log("".padEnd(25,"="))
JavaScript Tome-XXII
t="";
console.log("t+=array.slice(0)[-i]");
for(let l=array.length, i=l+2 ; i>-5 ; i--){
t+=array.slice(0)[i]+" | ";
}
console.log(t);
console.log("".padEnd(25,"="))
t="";
for(let l=array.length, i=l+2 ; i>-5 ; i--){
t+=array.slice(i)[0]+" | ";
}
console.log("t+=array.slice(-i)[0]");
console.log(t);
console.log("".padEnd(25,"="))
console.log("array.slice(0)[-i]");
for(let l=array.length, i=l+2 ; i>-5 ; i--){
console.log(array.slice(0)[i]);
}
console.log("".padEnd(25,"="))
console.log("array.slice(-i)[0]");
for(let l=array.length, i=l+2 ; i>-5 ; i--){
console.log(array.slice(i)[0]);
}
</script>
Différents types d’Arrays
- 42/174 -
dimanche, 6. janvier 2019 (5:16 )
J.D.B. DIASOLUKA Nz. Luyalu
Différents types d’Arrays
JavaScript Tome-XXII
- 43/174 -
dimanche, 6. janvier 2019 (5:16 )
J.D.B. DIASOLUKA Nz. Luyalu
JavaScript Tome-XXII
Pour avoir plus facilement le tout dernier élément d’une Array on écrit :
Array [ (Array . length) – 1 ].
La méthode « . fill ( v
,
d ) » avec les arrays typées :
Remplace par la valeur « v » tous les éléments de l’Array à partir de la position « d » à compter de zéro, par défaut à partir de l’élément d’indice 0.
Disponible pour les objets Array et Typed Array.
<script type="text/javascript">
var ar = new Uint16Array(
[90,27,65,91,10,31,51,16,56,82,12]);
console.log("Array de départ :\n",ar);
console.log("ar.length :",ar.length);
console.log("");
result = ar.fill(1283, 5);
Différents types d’Arrays
- 44/174 -
dimanche, 6. janvier 2019 (5:16 )
J.D.B. DIASOLUKA Nz. Luyalu
JavaScript Tome-XXII
console.log("Array après .fill(v,d) :\n"+ar);
console.log("ar.length :"+ar.length);
</script>
Array de départ :
Uint16Array(11) [
90, 27, 65, 91, 10, 31, 51, 16, 56, 82, …
]
test.html:3:4
ar.length : 11
test.html:4:4
Array après .fill(v,d) :
90,27,65,91,10,1283,1283,1283,1283,1283,1283
test.html:9:4
ar.length :11
test.html:9:4
C’est aussi l’occasion de voir la différence entre les deux affichages, avec
« console.log("Array de départ :\n" , ar); » ave une « virgule »,
et
« console.log("Array après .fill(v,d) :\n" + ar); » avec un
« plus » :
L’instruction « console.log("Array de départ :\n" , ar); » avec
virgule chaîne les affichages de chaque objet séparément avec la méthode
de son type, tandis que
« console.log("Array après .fill(v,d) :\n" + ar); » avec plus
utilise la méthode de l’objet String().
La méthode « Array . fill » permet de facilement initialiser tous ou partie
Différents types d’Arrays
- 45/174 -
dimanche, 6. janvier 2019 (5:16 )
J.D.B. DIASOLUKA Nz. Luyalu
JavaScript Tome-XXII
des éléments d’une Array préexistante ou fraîchement créée :
<script type="text/javascript"> "use strict";
let i1, i2;
var arr = new Int32Array(new ArrayBuffer(10 * 4));
console.log("Notre Array : "+arr);
arr.fill(300);
console.log("Notre Array : "+arr);
arr.fill(2018,5);
console.log("Notre Array : "+arr);
arr.fill(999,3,8);
console.log("Notre Array : "+arr);
// Une forme lourde pour ce faire :
for(let i=3 ; i< 7 ; i++) arr[i] = i;
console.log("Notre Array : "+ arr);
</script>
Comment initialiser les éléments d’une Array avec des nombres aléatoires par exemple entre 10 et 100, sans utiliser de boucle ?
On crée un Array d’autant d’éléments et avec la méthode « Array . map
( ) » on retourne une autre Array avec un nombre aléatoire pour chacun
des éléments de la première Array. On croirait que ceci suffit, mais on se
bluffe.
<script type="text/javascript"> "use strict";
const arr = new Array(15);
var nvTableau = arr.map(_=>Math.round(Math.random()*90)+10);
console.log(nvTableau);
Différents types d’Arrays - 46/174 - dimanche, 6. janvier 2019 (5:16 )
J.D.B. DIASOLUKA Nz. Luyalu
console.log(arr);
</script>
JavaScript Tome-XXII
Avec Firefox :
Avec Yandex :
On remplit chaque élément de l’Array-source lors de sa création :
<script type="text/javascript"> "use strict";
const arr = new Array(15).fill();
var nvTableau = arr.map(_=>Math.round(Math.random()*90)+10);
console.log(nvTableau);
console.log(arr);
</script>
Différents types d’Arrays
- 47/174 -
dimanche, 6. janvier 2019 (5:16 )
J.D.B. DIASOLUKA Nz. Luyalu
JavaScript Tome-XXII
Firefox :
Yandex :
Ça marche, mais on constate que chaque élément de la première Array
vaut « undefined » ce qui nous donne moche à l’affichage ?
On remplit alors donc l’Array en création par exemple avec des zéro (0) :
<script type="text/javascript"> "use strict";
const arr = new Array(15).fill(0);
var nvTableau = arr.map(_=>Math.round(Math.random()*90)+10);
console.log(nvTableau);
console.log(arr);
</script>
Différents types d’Arrays
- 48/174 -
dimanche, 6. janvier 2019 (5:16 )
J.D.B. DIASOLUKA Nz. Luyalu
JavaScript Tome-XXII
Une alternative est d’utiliser une boucle après la création de l’Array :
<script type="text/javascript"> "use strict";
const arr = new Array(15);
for(let i=0, l=arr.length ; i<l ; i++){
arr[i]= Math.round(Math.random()*90)+10;
}
console.log(arr);
</script>
La méthode « Array . copyWithin ( v
Typées » :
,
d ) » des « Arrays » et « Arrays
Modifie l’Array en cours en remplaçant ses éléments effectifs situés à partir
de la position « d », par ses éléments contenus à partir de la position « v »,
et ce, dans les limites de la taille maximale de l’array.
<script type="text/javascript"> "use strict";
let i1, i2;
var arr = new Int32Array([
29,66,23,95,28,12,40,22,92,75,90,54,34,19,35,52,62,98
]);
console.log("Notre Array : ".padStart(24," ")+arr);
Différents types d’Arrays
- 49/174 -
dimanche, 6. janvier 2019 (5:16 )
J.D.B. DIASOLUKA Nz. Luyalu
JavaScript Tome-XXII
i1=3,i2=14;
arr.copyWithin(i1, i2);
console.log(
("arr.copyWithin("+i1+","+i2+") : ").padStart(24," ")+
arr);
i1=2,i2=7;
arr.copyWithin(i1, i2);
console.log(
("arr.copyWithin("+i1+","+i2+") : ").padStart(24," ")+
arr);
i1=6,i2=3;
arr.copyWithin(i1,i2);
console.log(
("arr.copyWithin("+i1+","+i2+") : ").padStart(24," ")+
arr);
i1=5,i2=5;
arr.copyWithin(i1,i2);
console.log(
("arr.copyWithin("+i1+","+i2+") : ").padStart(24," ")+
arr);
i1=6,i2=-6;
arr.copyWithin(i1,i2);
console.log(
("arr.copyWithin("+i1+","+i2+") : ").padStart(24," ")+
arr);
Différents types d’Arrays - 50/174 - dimanche, 6. janvier 2019 (5:16 )
J.D.B. DIASOLUKA Nz. Luyalu
JavaScript Tome-XXII
i1=-7,i2=7;
arr.copyWithin(i1,i2);
console.log(
("arr.copyWithin("+i1+","+i2+") : ").padStart(24," ")+
arr);
i1=-8,i2=-8;
arr.copyWithin(i1,i2);
console.log(
("arr.copyWithin("+i1+","+i2+") : ").padStart(24," ")+
arr);
i1=-9,i2=-3;
arr.copyWithin(i1,i2);
console.log(
("arr.copyWithin("+i1+","+i2+") : ").padStart(24," ")+
arr);
i1=-5,i2=-9;
arr.copyWithin(i1,i2);
console.log(
("arr.copyWithin("+i1+","+i2+") : ").padStart(24," ")+
arr);
i1=-5,i2=7;
arr.copyWithin(i1,i2);
console.log(
("arr.copyWithin("+i1+","+i2+") : ").padStart(24," ")+
arr);
Différents types d’Arrays - 51/174 - dimanche, 6. janvier 2019 (5:16 )
J.D.B. DIASOLUKA Nz. Luyalu
JavaScript Tome-XXII
i1=-7,i2=5;
arr.copyWithin(i1,i2);
console.log(
("arr.copyWithin("+i1+","+i2+") : ").padStart(24," ")+
arr);
i1=0,i2=5;
arr.copyWithin(i1,i2);
console.log(
("arr.copyWithin("+i1+","+i2+") : ").padStart(24," ")+
arr);
i1=5,i2=0;
arr.copyWithin(i1,i2);
console.log(
("arr.copyWithin("+i1+","+i2+") : ").padStart(24," ")+
arr);
</script>
Notre Array :
29,66,23,95,28,12,40,22,92,75,90,54,34,19,35,52,62,98
arr.copyWithin(3,14) :
29,66,23,35,52,62,98,22,92,75,90,54,34,19,35,52,62,98
arr.copyWithin(2,7) :
29,66,22,92,75,90,54,34,19,35,52,62,98,19,35,52,62,98
arr.copyWithin(6,3) :
29,66,22,92,75,90,92,75,90,54,34,19,35,52,62,98,19,35
Différents types d’Arrays
- 52/174 -
dimanche, 6. janvier 2019 (5:16 )
J.D.B. DIASOLUKA Nz. Luyalu
JavaScript Tome-XXII
arr.copyWithin(5,5) :
29,66,22,92,75,90,92,75,90,54,34,19,35,52,62,98,19,35
arr.copyWithin(6,-6) :
29,66,22,92,75,90,35,52,62,98,19,35,35,52,62,98,19,35
arr.copyWithin(-7,7) :
29,66,22,92,75,90,35,52,62,98,19,52,62,98,19,35,35,52
arr.copyWithin(-8,-8) :
29,66,22,92,75,90,35,52,62,98,19,52,62,98,19,35,35,52
arr.copyWithin(-9,-3) :
29,66,22,92,75,90,35,52,62,35,35,52,62,98,19,35,35,52
arr.copyWithin(-5,-9) :
29,66,22,92,75,90,35,52,62,35,35,52,62,35,35,52,62,98
arr.copyWithin(-5,7) :
29,66,22,92,75,90,35,52,62,35,35,52,62,52,62,35,35,52
arr.copyWithin(-7,5) :
29,66,22,92,75,90,35,52,62,35,35,90,35,52,62,35,35,52
arr.copyWithin(0,5) :
90,35,52,62,35,35,90,35,52,62,35,35,52,52,62,35,35,52
arr.copyWithin(5,0) :
90,35,52,62,35,90,35,52,62,35,35,90,35,52,62,35,35,52
La méthode « Array . copyWithin ( v
rays Typées » :
,
d
,
n ) » des « Arrays » et « Ar-
Modifie l’Array en cours en remplaçant « n » de ses éléments effectifs situés à partir de la position « d », par ses éléments contenus à partir de la
position « v », et ce, dans les limites de la taille maximale de l’array.
Les règles de remplacement ne sont pas exactement les mêmes qu’avec
arr.copyWithin(i1,i2).
Différents types d’Arrays
- 53/174 -
dimanche, 6. janvier 2019 (5:16 )
J.D.B. DIASOLUKA Nz. Luyalu
JavaScript Tome-XXII
<script type="text/javascript"> "use strict";
let i1, i2, i3;
var arr = new Int32Array([
29,66,23,95,28,12,40,22,92,75,90,54,34,19,35,52,62,98
]);
console.log("Notre Array : ".padStart(26," ")+arr);
i1=3,i2=6;i3=7;
arr.copyWithin(i1,i2,i3);
console.log(("arr.copyWithin("+i1+","+i2+","+i3+") : ")
.padStart(26," ")+ arr);
i1=6,i2=3;i3=7;
arr.copyWithin(i1,i2,i3);
console.log(("arr.copyWithin("+i1+","+i2+","+i3+") : ")
.padStart(26," ")+ arr);
i1=5,i2=5;i3=7;
arr.copyWithin(i1,i2,i3);
console.log(("arr.copyWithin("+i1+","+i2+","+i3+") : ")
.padStart(26," ")+ arr);
i1=6,i2=-6;i3=7;
arr.copyWithin(i1,i2,i3);
console.log(("arr.copyWithin("+i1+","+i2+","+i3+") : ")
.padStart(26," ")+ arr);
Différents types d’Arrays
- 54/174 -
dimanche, 6. janvier 2019 (5:16 )
J.D.B. DIASOLUKA Nz. Luyalu
i1=-7,i2=7;i3=7;
arr.copyWithin(i1,i2,i3);
JavaScript Tome-XXII
console.log(("arr.copyWithin("+i1+","+i2+","+i3+") : ")
.padStart(26," ")+ arr);
i1=-8,i2=-8;i3=7;
arr.copyWithin(i1,i2,i3);
console.log(("arr.copyWithin("+i1+","+i2+","+i3+") : ")
.padStart(26," ")+ arr);
i1=-9,i2=-3;i3=7;
arr.copyWithin(i1,i2,i3);
console.log(("arr.copyWithin("+i1+","+i2+","+i3+") : ")
.padStart(26," ")+ arr);
i1=-5,i2=-9;i3=7;
arr.copyWithin(i1,i2,i3);
console.log(("arr.copyWithin("+i1+","+i2+","+i3+") : ")
.padStart(26," ")+ arr);
i1=-5,i2=7;i3=7;
arr.copyWithin(i1,i2,i3);
console.log(("arr.copyWithin("+i1+","+i2+","+i3+") : ")
.padStart(26," ")+ arr);
i1=-7,i2=5;i3=7;
arr.copyWithin(i1,i2,i3);
console.log(("arr.copyWithin("+i1+","+i2+","+i3+") : ")
.padStart(26," ")+ arr);
Différents types d’Arrays - 55/174 - dimanche, 6. janvier 2019 (5:16 )
J.D.B. DIASOLUKA Nz. Luyalu
JavaScript Tome-XXII
i1=0,i2=5;i3=7;
arr.copyWithin(i1,i2,i3);
console.log(("arr.copyWithin("+i1+","+i2+","+i3+") : ")
.padStart(26," ")+ arr);
i1=5,i2=0;i3=7;
arr.copyWithin(i1,i2,i3);
console.log(("arr.copyWithin("+i1+","+i2+","+i3+") : ")
.padStart(26," ")+ arr);
</script>
Notre Array :
29,66,23,95,28,12,40,22,92,75,90,54,34,19,35,52,62,98
arr.copyWithin(3,6,7) :
29,66,23,40,28,12,40,22,92,75,90,54,34,19,35,52,62,98
arr.copyWithin(6,3,7) :
29,66,23,40,28,12,40,28,12,40,90,54,34,19,35,52,62,98
arr.copyWithin(5,5,7) :
29,66,23,40,28,12,40,28,12,40,90,54,34,19,35,52,62,98
arr.copyWithin(6,-6,7) :
29,66,23,40,28,12,40,28,12,40,90,54,34,19,35,52,62,98
arr.copyWithin(-7,7,7) :
29,66,23,40,28,12,40,28,12,40,90,54,34,19,35,52,62,98
arr.copyWithin(-8,-8,7) :
29,66,23,40,28,12,40,28,12,40,90,54,34,19,35,52,62,98
arr.copyWithin(-9,-3,7) :
29,66,23,40,28,12,40,28,12,40,90,54,34,19,35,52,62,98
Différents types d’Arrays
- 56/174 -
dimanche, 6. janvier 2019 (5:16 )
J.D.B. DIASOLUKA Nz. Luyalu
JavaScript Tome-XXII
arr.copyWithin(-5,-9,7) :
29,66,23,40,28,12,40,28,12,40,90,54,34,19,35,52,62,98
arr.copyWithin(-5,7,7) :
29,66,23,40,28,12,40,28,12,40,90,54,34,19,35,52,62,98
arr.copyWithin(-7,5,7) :
29,66,23,40,28,12,40,28,12,40,90,12,40,19,35,52,62,98
arr.copyWithin(0,5,7) :
12,40,23,40,28,12,40,28,12,40,90,12,40,19,35,52,62,98
arr.copyWithin(5,0,7) :
12,40,23,40,28,12,40,23,40,28,12,40,40,19,35,52,62,98
Les méthodes « Array . indexOf (n ) » et « Array . lastIndexOf (n ) » des
« Arrays » et « Arrays Typées » :
Donnent respectivement la première et la dernière position d’un élément
dans une Array ou Typed Array.
<script type="text/javascript">
var arr = new Int32Array(
[24,26,22,29,13,16,15,22,26,13,22,20,20,12,12,18,20,19]);
console.log("Notre Array: "+arr);
console.log("arr.length: "+arr.length);
const n=22;
var lidx = arr.lastIndexOf(n);
console.log(
"La dernière position de "+n+" est à l'index : "+lidx);
var fidx = arr.indexOf(n);
console.log(
"La première position de "+n+" est à l'index : "+fidx);
</script>
Différents types d’Arrays
- 57/174 -
dimanche, 6. janvier 2019 (5:16 )
J.D.B. DIASOLUKA Nz. Luyalu
JavaScript Tome-XXII
Notre Array:
24,26,22,29,13,16,15,22,26,13,22,20,20,12,12,18,20,19
test.html:4:4
arr.length: 18
test.html:5:4
La dernière position de 22 est à l'index : 10 test.html:10:4
La première position de 22 est à l'index : 2 test.html:14:4
Les méthodes « Array . find ( el ) » et « Array . findIndex ( el ) » des
« Arrays » et « Arrays Typées » :
<script type="text/javascript"> "use strict";
const isCubic = n => !(Math.pow(n,1/3) % 1);
console.log([86, 57, 70, 68, 8, 27].find(isCubic));
// => 8
console.log([4, 8, NaN, 16, 23, 42].find(isNaN));
// => NaN
console.log([73, 343, 125, 57, 21].findIndex(isCubic));
// => 2
console.log([4, 8, 16, 23, 42, NaN].findIndex(isNaN));
// => 5
</script>
En passant, voici les propriétés auxquelles obéissent les Objets Int8Array ,
Int16Array , Int32Array , Uint8Array , Uint16Array , Uint32Array :
Int8Array(), Int16Array(), Int32Array(),
Uint8Array(), Uint16Array(), Uint32Array(),
Uint8ClampedArray().
BYTES_PER_ELEMENT: 4
length: 3
name: "Int32Array"
prototype: Int32ArrayPrototype { … }
BYTES_PER_ELEMENT: 4
constructor: function Int32Array()
Différents types d’Arrays
- 58/174 -
dimanche, 6. janvier 2019 (5:16 )
J.D.B. DIASOLUKA Nz. Luyalu
JavaScript Tome-XXII
constructor: Int32Array()
BYTES_PER_ELEMENT: 4
length: 3
name: "Int32Array"
prototype: Int32ArrayPrototype { … }
<prototype>: function TypedArray()
<prototype>: ??? { … }
buffer: Getter
byteLength: Getter
byteOffset: Getter
constructor: function TypedArray()
copyWithin: function copyWithin()
entries: function entries()
every: function every()
fill: function fill()
filter: function filter()
find: function find()
findIndex: function findIndex()
forEach: function forEach()
includes: function includes()
indexOf: function indexOf()
join: function join()
keys: function keys()
lastIndexOf: function lastIndexOf()
length: Getter
map: function map()
reduce: function reduce()
reduceRight: function reduceRight()
reverse: function reverse()
set: function set()
slice: function slice()
some: function some()
sort: function sort()
subarray: function subarray()
toLocaleString: function toLocaleString()
toString: function toString()
values: function values()
Symbol(Symbol.iterator): function values()
Symbol(Symbol.toStringTag): Getter
<prototype>: Object { … }
<prototype>: function TypedArray()
Différents types d’Arrays
- 59/174 -
dimanche, 6. janvier 2019 (5:16 )
J.D.B. DIASOLUKA Nz. Luyalu
JavaScript Tome-XXII
Comparez ces quelques propriétés disponibles avec les types de données
ci-dessus, avec quelques-unes disponible avec l’objet Array :
Array()
concat: function concat()
every: function every()
filter: function filter()
forEach: function forEach()
from: function from()
indexOf: function indexOf()
isArray: function isArray()
join: function join()
lastIndexOf: function lastIndexOf()
length: 1
map: function map()
name: "Array"
of: function of()
pop: function pop()
prototype: Array []
concat: function concat()
constructor: function Array()
concat: function concat()
every: function every()
filter: function filter()
forEach: function forEach()
from: function from()
indexOf: function indexOf()
isArray: function isArray()
join: function join()
lastIndexOf: function lastIndexOf()
length: 1
map: function map()
name: "Array"
of: function of()
pop: function pop()
prototype: Array []
push: function push()
Différents types d’Arrays
- 60/174 -
dimanche, 6. janvier 2019 (5:16 )
J.D.B. DIASOLUKA Nz. Luyalu
JavaScript Tome-XXII
reduce: function reduce()
reduceRight: function reduceRight()
reverse: function reverse()
shift: function shift()
slice: function slice()
some: function some()
sort: function sort()
splice: function splice()
unshift: function unshift()
Symbol(Symbol.species): Getter
<prototype>: function ()
copyWithin: function copyWithin()
entries: function entries()
every: function every()
fill: function fill()
filter: function filter()
find: function find()
findIndex: function findIndex()
flat: function flat()
flatMap: function flatMap()
forEach: function forEach()
includes: function includes()
indexOf: function indexOf()
join: function join()
keys: function keys()
lastIndexOf: function lastIndexOf()
length: 0
map: function map()
pop: function pop()
push: function push()
reduce: function reduce()
reduceRight: function reduceRight()
reverse: function reverse()
shift: function shift()
slice: function slice()
some: function some()
sort: function sort()
splice: function splice()
toLocaleString: function toLocaleString()
Différents types d’Arrays
- 61/174 -
dimanche, 6. janvier 2019 (5:16 )
J.D.B. DIASOLUKA Nz. Luyalu
JavaScript Tome-XXII
toSource: function toSource()
toString: function toString()
unshift: function unshift()
values: function values()
Symbol(Symbol.iterator): function values()
Symbol(Symbol.unscopables): Object {
copyWithin: true,
entries: true,
fill: true, …
}
<prototype>: Object { … }
push: function push()
reduce: function reduce()
reduceRight: function reduceRight()
reverse: function reverse()
shift: function shift()
slice: function slice()
some: function some()
sort: function sort()
splice: function splice()
unshift: function unshift()
Symbol(Symbol.species): Getter
<get>: function Symbol.species()
<prototype>: function ()
Différents types d’Arrays
- 62/174 -
dimanche, 6. janvier 2019 (5:16 )
J.D.B. DIASOLUKA Nz. Luyalu
JavaScript Tome-XXII
LES ARRAYS :
Les Arrays ou tableaux sont des collections les plus faciles à utiliser. Il
existe plusieurs façons de créer une Array, dont :
I.
Avec seulement des crochets :
<script type="text/javascript"> "use strict";
let a;
a = [];
// Array initialement vide.
console.log("a =",a,"[] =",[]);
a = [0];
// Array initialement à un seul élément,
// le nombre 0.
console.log("a =",a,"[0] =",[0]);
a = [10,11];
// Array initialement à deux éléments,
// les nombres 10 et 11 ou autres.
console.log("a =",a,"[0] =",[10,11]);
a = [10.11];
// Array initialement à un seul élément,
// le nombre 10.11.
console.log("a =",a,"[0] =",[10.11]);
</script>
Différents types d’Arrays
- 63/174 -
dimanche, 6. janvier 2019 (5:16 )
J.D.B. DIASOLUKA Nz. Luyalu
II.
JavaScript Tome-XXII
Avec Simplement « Array », sans « new » (sans passer par le constructeur = initialiseur) :
<script type="text/javascript"> "use strict";
let a;
a = Array();
// Array initialement vide.
console.log("a =",a,"Array() =",Array());
a = Array(0)
// Array initialement vide.
console.log("a =",a,"Array(0) =",Array(0));
a = Array("0")
// Array initialement à un seul élément,
// le littéral zéro (0).
console.log("a =",a,'Array("0") =',Array("0"));
a = Array(10,11)
// Array initialement à deux éléments,
// les nombres 10 et 11 ou autres.
console.log("a =",a,"Array(10,11) =",Array(10,11));
a = Array(10.11);
console.log("a =",a,"[0] =",Array(10.11));
// RangeError: invalid array length
Différents types d’Arrays
- 64/174 -
dimanche, 6. janvier 2019 (5:16 )
J.D.B. DIASOLUKA Nz. Luyalu
JavaScript Tome-XXII
</script>
III.
Avec « Array » et « new » (en faisant appel au constructeur = initialiseur) :
<script type="text/javascript"> "use strict";
let a;
a = new Array();
// Array initialement vide.
console.log("a =",a,"new Array() =",new Array());
a = new Array(0)
// Array initialement vide.
console.log("a =",a,"new Array(0) =",new Array(0));
a = new Array("0")
// Array initialement à un seul élément,
// le littéral zéro (0).
console.log("a =",a,'new Array("0") =',new Array("0"));
a = new Array(10,11)
// Array initialement à deux éléments,
// les nombres 10 et 11 ou autres.
console.log("a =",a,"new Array(10,11) =",new Array(10,11));
Différents types d’Arrays
- 65/174 -
dimanche, 6. janvier 2019 (5:16 )
J.D.B. DIASOLUKA Nz. Luyalu
JavaScript Tome-XXII
a = new Array(10.11);
console.log("a =",a,"[0] =",new Array(10.11));
// RangeError: invalid array length
</script>
Quelques pièges avec les Arrays :
Si « "b" in ["a" , "b" , "c"] » donne « false »,
« 2 in [ 1 , 2 , 3 ] » donne « true ».
<script> "use strict";
const b="b", d=2;
console.log("b" in ["a","b","c"]); // false
console.log(b in ["a","b","c"]);
// false
console.log(2 in [1 , 2 , 3]);
console.log(d in [1 , 2 , 3]);
</script>
// true
// true
La propriété « Array . sort ( ) » :
Pour trier les éléments d’une Array, rien n’est plus simple :
Différents types d’Arrays
- 66/174 -
dimanche, 6. janvier 2019 (5:16 )
J.D.B. DIASOLUKA Nz. Luyalu
JavaScript Tome-XXII
<script type="text/javascript"> "use strict";
let a = Array.from(
new Set([23, 53, 56, 59, 60, 31, 87, 97, 72, 51])
).sort();
let sorted=true;
console.log(a);
for(var k=0 ; k < a.length-2 ; )
if(a[k] > a[++k]){
sorted=false;
break;
}
if(!sorted)status="Not";
console.log(status,"Sorted !, pos =",k)
</script>
En bloquant la méthode « . sort » de tri :
<script type="text/javascript"> "use strict";
let a = Array.from(
new Set([23, 53, 56, 59, 60, 31, 87, 97, 72, 51])
)//.sort();
let sorted=true;
console.log(a);
for(var k=0 ; k < a.length-2 ; )
if(a[k] > a[++k]){
sorted=false;
break;
}
if(!sorted)status="Not";
console.log(status,"Sorted !, pos =",k)
</script>
Différents types d’Arrays
- 67/174 -
dimanche, 6. janvier 2019 (5:16 )
J.D.B. DIASOLUKA Nz. Luyalu
JavaScript Tome-XXII
Le tri d’une Array peut avoir des consequences imprévisibles et catastrophiques :
Ce petit code cherche s’il y a un nombre dans l’Array de nombres, qui soit
la moyenne de ses voisins. Pour notre cas ici l’Array trié contient ce
nombre à l’indice [0->]2, et c’est le nombre 43.
<script type="text/javascript"> "use strict";
let a = Array.from(
new Set([41, 96, 50, 92, 14, 96, 95, 45, 41, 43])
).sort();
let ok=false;
console.log(a);
for(var k=1 ; k < a.length-2 ; k++){
if(a[k] == ((a[k-1] + a[k+1])/2)){
ok=true;
break;
}
}
if(!ok)status="*!NO!*";
console.log(status,
`neighboring Meaners !, pos = a[${k}] = ${a[k]}`);
console.log(
`( a[${k-1}] {${a[k-1]}} +` +
` a[${k+1}] {${a[k+1]}} ) / 2 = `+
`${(a[k-1] + a[k+1])/2}`);
console.log(a);
</script>
En désactivant le tri comme ceci :
Différents types d’Arrays
- 68/174 -
dimanche, 6. janvier 2019 (5:16 )
J.D.B. DIASOLUKA Nz. Luyalu
JavaScript Tome-XXII
let a = Array.from(
new Set([41, 96, 50, 92, 14, 96, 95, 45, 41, 43])
)//.sort();
L’Array ne contient plus de nombre qui soit la moyenne de ses voisins !
Quelques propriétés disponibles avec l’objet « Array » :
a =
(2) […]
0: 10
1: 11
length: 2
<prototype>: Array []
<prototype>: []
concat: function concat()
constructor: function Array()
copyWithin: function copyWithin()
entries: function entries()
every: function every()
fill: function fill()
filter: function filter()
find: function find()
findIndex: function findIndex()
flat: function flat()
flatMap: function flatMap()
forEach: function forEach()
includes: function includes()
indexOf: function indexOf()
join: function join()
keys: function keys()
lastIndexOf: function lastIndexOf()
length: 0
map: function map()
pop: function pop()
push: function push()
Différents types d’Arrays - 69/174 - dimanche, 6. janvier 2019 (5:16 )
J.D.B. DIASOLUKA Nz. Luyalu
JavaScript Tome-XXII
reduce: function reduce()
reduceRight: function reduceRight()
reverse: function reverse()
shift: function shift()
slice: function slice()
some: function some()
sort: function sort()
splice: function splice()
toLocaleString: function toLocaleString()
toSource: function toSource()
toString: function toString()
unshift: function unshift()
values: function values()
Symbol(Symbol.iterator): function values()
Symbol(Symbol.unscopables): Object {
copyWithin: true,
entries: true,
fill: true, …
}
<prototype>: Object { … }
new Array(10,11) = (2) […]
0: 10
1: 11
length: 2
<prototype>: Array []
Comme on l’a vu au commencement, on peut utiliser une Array de
nombres typés.
Différents types d’Arrays
- 70/174 -
dimanche, 6. janvier 2019 (5:16 )
J.D.B. DIASOLUKA Nz. Luyalu
JavaScript Tome-XXII
LES PARAMÈTRES DU RESTE :
Un autre type d’Array est le paramètre du reste.
<script type="text/javascript"> "use strict";
let f = (p, ...a) => {
console.log("a =",a);
}
f();
</script>
En fait, les Arrays sont simplement des littéraux d’objet dont les labels
sont étiquetés avec des nombres ordonnés à partir de l’indice zéro.
Voyez leur structure ci-après :
<script type="text/javascript"> "use strict";
let f = (p, ...a) => {
console.log("a =",a);
return a;
}
let r=f("va dans p",
"Zéro","Un","Deux","Trois","Quatre","Cinq");
console.log("Object.entries(r)",Object.entries(r));
console.log("Object.values(r)",Object.values(r));
</script>
Différents types d’Arrays
- 71/174 -
dimanche, 6. janvier 2019 (5:16 )
J.D.B. DIASOLUKA Nz. Luyalu
JavaScript Tome-XXII
a =
Array(6) [
"Zéro", "Un", "Deux",
"Trois", "Quatre", "Cinq"
]
test.html:3:3
Object.entries(r)
Array(6) [
(2) […], (2) […], (2) […],
(2) […], (2) […], (2) […]
]
test.html:10:3
Object.values(r)
Array(6) [
"Zéro", "Un", "Deux",
"Trois", "Quatre", "Cinq"
]
test.html:11:3
Différents types d’Arrays
- 72/174 -
dimanche, 6. janvier 2019 (5:16 )
J.D.B. DIASOLUKA Nz. Luyalu
JavaScript Tome-XXII
Voici comment reconstituer cette Array avec un « Object literal » :
<script type="text/javascript"> "use strict";
let r = {
0:"Zéro" , 1:"Un" , 2:"Deux",
3:"Trois" , 4:"Quatre" , 5:"Cinq"
}
console.log("Object.entries(r)",Object.entries(r));
console.log("Object.values(r)",Object.values(r));
</script>
Différents types d’Arrays
- 73/174 -
dimanche, 6. janvier 2019 (5:16 )
J.D.B. DIASOLUKA Nz. Luyalu
JavaScript Tome-XXII
Confrontons les deux paradigmes :
<script type="text/javascript"> "use strict";
let a=[
"Zéro" , "Un" , "Deux" ,
"Trois" , "Quatre" , "Cinq"
]
let o={
0:"Zéro" , 1:"Un" , 2:"Deux" ,
3:"Trois" , 4:"Quatre" , 5:"Cinq"
}
console.log("ARRAY" , "a[0] =" , a[0]);
console.log("HASH" , "o[0] =" , o[0]);
</script>
Différents types d’Arrays
- 74/174 -
dimanche, 6. janvier 2019 (5:16 )
J.D.B. DIASOLUKA Nz. Luyalu
JavaScript Tome-XXII
Deux fonctions (ou mieux, méthodes) font exactement la même chose avec
les Arrays Typées : la Array.slice() et la Array.subarray(), pendant qu’avec
les Arrays seule la méthode « Array.slice() » est disponible.
<script type="text/javascript">
let r;
var typedArray =
new Int8Array([47,84,52,98,49,96,73,50,28,26 ]);
console.log("Array initiale =\n"+typedArray);
r = typedArray.slice(2, 6);
console.log("\ntypedArray.slice(2, 7) =\n"+r);
r = typedArray.subarray(2, 6);
console.log("\ntypedArray.subarray(2, 7) =\n "+r);
console.log("\nArray initiale conservée :\n" +
typedArray);
</script>
Différents types d’Arrays
- 75/174 -
dimanche, 6. janvier 2019 (5:16 )
J.D.B. DIASOLUKA Nz. Luyalu
Différents types d’Arrays
JavaScript Tome-XXII
- 76/174 -
dimanche, 6. janvier 2019 (5:16 )
J.D.B. DIASOLUKA Nz. Luyalu
JavaScript Tome-XXII
LES « ASSOCIATIVE ARRAYS »
( « ARRAYS ASSOCIATIVES » ou « TABLEAUX ASSOCIATIFS ») :
C’est comme leur nom l’indique, des arrays sous forme de littéral d’objet
et dans lesquels naturellement les values (éléments) sont explicitement
associées à des keys, comme dans les « littéraux d’objet » ordinaires dans
lesquels c’est le programmeur qui détermine les noms des keys (on associe explicitement des noms de keys littéraux à des values). Dans une Array
les keys sont automatiquement numérotées « de 0 à n », à partir du premier élément de l’array.
Une « Array associative » est définie dans des « accolades » (exactement
comme un « objet hash ») et non avec des « crochets » comme pour les
« Arrays ».
<script type="text/javascript"> "use strict";
console.log(["dias","luy","nzoyif"])
console.log({0:"dias",1:"luy",2:"nzoyif"})
</script>
Exécution avec Firefox Quantum 64.0b13 :
Différents types d’Arrays
- 77/174 -
dimanche, 6. janvier 2019 (5:16 )
J.D.B. DIASOLUKA Nz. Luyalu
JavaScript Tome-XXII
Exécution avec Yandex Version 18.11.0.2022 beta :
Mais qu’est-ce que vous me dites-là ? Vous ne connaissez toujours pas
encore ce que sont les « keys » et les « values » ?
Les « keys » sont les libellés qui permettent l’accès à un « values » de
l’array ou de l’objet (les deux d’ailleurs sont des objets), ce sont des voies
d’accès aux values, comme les « variables » permettent elles aussi
d’accéder aux « values » stockées dans la RAM de l’ordinateur. D’ailleurs on
peut aussi changer les values dans une « array » ou un « objet ». « keys »
et « values »
Voyons :
<script type="text/javascript"> "use strict";
const a = ["dias","luy","nzoyif"];
console.dir(`a = ${a},
Object.entries(a) = ${Object.entries(a)},
Object.keys(a) = ${Object.keys(a)},
Object.values(a) = ${Object.values(a)}`
);
Différents types d’Arrays
- 78/174 -
dimanche, 6. janvier 2019 (5:16 )
J.D.B. DIASOLUKA Nz. Luyalu
JavaScript Tome-XXII
const o =
{nom:"dias",postnom1:"luy",postnom2:"nzoyif"};
console.dir(`o = ${o},
Object.entries(o) = ${Object.entries(o)},
Object.keys(o) = ${Object.keys(o)},
Object.values(o) = ${Object.values(o)}`
);
</script>
Ceci a été affiché avec la méthode de l’objet « String », puisque que nous
l’avons affiché en tant que chaîne de caractères, ici dans une « littérale de
chaîne ».
Synoptique mais beurk ? Dans ce cas affichons cela avec la méthode respective de chaque élément, en les séparant avec des virgules !
<script type="text/javascript"> "use strict";
const a = ["dias","luy","nzoyif"];
console.dir(`a = `, a,
`Object.entries(a) = `, Object.entries(a),
`Object.keys(a) = `, Object.keys(a),
`Object.values(a) = `, Object.values(a)
);
const o = {
"nom":"dias","postnom1":"luy","postnom2":"nzoyif"
};
console.dir(`o = `, o,
`Object.entries(a) = `, Object.entries(a),
`Object.keys(a) = `, Object.keys(a),
`Object.values(a) = `, Object.values(a)
);
Différents types d’Arrays
- 79/174 -
dimanche, 6. janvier 2019 (5:16 )
J.D.B. DIASOLUKA Nz. Luyalu
JavaScript Tome-XXII
console.log("Object.entries(a)[0] = ",
Object.entries(a)[0], Object.entries(a)["0"]);
console.log("Object.entries(o)[0] = ",
Object.entries(o)[0], Object.entries(o)[0]);
console.log("Object.entries(a)[0] = ",
Object.entries(a)[0][0], Object.entries(a)[0][1]);
console.log("Object.entries(o)[0] = ",
Object.entries(o)[0][0], Object.entries(o)[0][1]);
console.log("Object.keys(a)[0] = ",
Object.keys(a)[0], Object.keys(a)["0"]);
console.log("Object.keys(o)[0] = ",
Object.keys(o)[0], Object.keys(o)[0]);
console.log("Object.values(a)[0] = ",
Object.values(a)[0], Object.values(a)["0"]);
console.log("Object.values(o)[0] = ",
Object.values(o)[0], Object.values(o)[0]);
console.log("Object.values(o)'[nom...'] = ",
o['nom'], o['postnom1'], o['postnom2']);
</script>
Exécution avec Firefox Quantum 64.0b13 :
Pour l’Array « a » :
Différents types d’Arrays
- 80/174 -
dimanche, 6. janvier 2019 (5:16 )
J.D.B. DIASOLUKA Nz. Luyalu
JavaScript Tome-XXII
Pour l’objet « o » :
Différents types d’Arrays
- 81/174 -
dimanche, 6. janvier 2019 (5:16 )
J.D.B. DIASOLUKA Nz. Luyalu
JavaScript Tome-XXII
Mais alors, qu’est-ce qu’une « Associated Array » ?
Vulgairement parlant, c’est ni plus ni moins, un « littéral d’objet » sans
« propriétés » et sans « méthodes » ajoutées.
Les éléments d’une « Array associative » sont dynamiquement ajoutés
avec la syntaxe suivante :
arrayAssociative["key"] = value;
alors que pour un objet ça se fait avec la syntaxe suivante :
objet . "key"
=
value;
<script type="text/javascript"> "use strict";
const a = {"nom":"dias", "prenom1":"luy"};
console.log(`a = `, a) ;
console.log(`a["nom"] = `, a["nom"]) ;
console.log(`a["prenom1"] = `, a["prenom1"]);
const e1 = 'a["prenom2"] = "nzoyif"';
// Assignation pour Array associative.
console.log(``.padStart(5,"*"),`${e1} => ${eval(e1)}`);
console.dir(`a = `, a);
console.dir(`a["nom"] = ${a["nom"]}
Différents types d’Arrays
- 82/174 -
dimanche, 6. janvier 2019 (5:16 )
J.D.B. DIASOLUKA Nz. Luyalu
JavaScript Tome-XXII
a["prenom1"] = ${a["prenom1"]} // Notez les crochets
a.prenom2 = ${a.prenom2}
// Notez le point`
);
console.log("=".repeat(25));
const o = { "nom":"dias","prenom1":"luy" };
console.log(`o = `, o) ;
console.log(`o["nom"] = `, o["nom"]) ;
console.log(`o["prenom1"] = `, o["prenom1"]);
const e2 = 'o.prenom2 = "nzoyif"';
// Assignation pour objet hash.
console.log(``.padStart(5,"*"),`${e2} => ${eval(e2)}`);
console.dir(`o = `, o);
console.dir(`o["nom"] = ${o["nom"]} // Notez les crochets
o.prenom1 = ${o.prenom1}
// Notez le points.
o["prenom2"] = ${o["prenom2"]}`
);
</script>
Pour l’Array Associative :
Différents types d’Arrays
- 83/174 -
dimanche, 6. janvier 2019 (5:16 )
J.D.B. DIASOLUKA Nz. Luyalu
JavaScript Tome-XXII
Pour l’objet :
Une des caractéristiques de JavaScript c’est la « PLÉTHORISATION » des
possibilités, peut-être pour répondre aux habitudes diversifiées de plusieurs programmeurs venant des plates-formes différentes !
Différents types d’Arrays
- 84/174 -
dimanche, 6. janvier 2019 (5:16 )
J.D.B. DIASOLUKA Nz. Luyalu
JavaScript Tome-XXII
LES MAPS :
Les « Maps » sont des « Arrays » presque comme des « Associative Arrays », leurs données sont regroupées dans des couples « key : value ».
Deux différences c’est que
1.
Dans les « Maps » les couples « key : value » sont regroupés dans
des Arrays à seulement ces deux éléments, ces couples étant séparés
entre eux par une virgule ;
2.
Le tout est délimité/regroupé dans une grande array le « Map »
délimitée par des crochets au lieu des accolades contrairement aux « Associatives Arrays ».
<script type="text/javascript"> "use strict";
var map = new Map([
['a', 20], [Date.now(), 54],
[45, Date.now()], [18, 'c']
]);
console.log(map);
// Map(4) {
//
a -> 20, 1544283193937 -> 54,
//
45 -> 1544283193937, 18 -> "c"
// }
for(var el of map) console.log(el);
var t=`${"Keys".padEnd(7," ")} = | `;
for(var cle of map.keys()) t += cle + ` | `;
console.log(t);
var t=`${"Values".padEnd(7," ")} = * `;
for(var val of map.values()) t += val + ` * `;
console.log(t);
</script>
Différents types d’Arrays
- 85/174 -
dimanche, 6. janvier 2019 (5:16 )
J.D.B. DIASOLUKA Nz. Luyalu
Différents types d’Arrays
JavaScript Tome-XXII
- 86/174 -
dimanche, 6. janvier 2019 (5:16 )
J.D.B. DIASOLUKA Nz. Luyalu
JavaScript Tome-XXII
Quelques méthodes de l’objet « Map ( ) » :
<script type="text/javascript"> "use strict";
var a = [Date.now()];
console.log(a); // Array [ 1544273035052 ]
var map = new Map([['a', 20], [18, 35], [91, 54]]);
console.log(map);
// Firefox : Map { a -> 20, 18 -> 35, 91 -> 54 }
// Yandex : Map(2) {"a" => 20, 18, 91 -> 54 => 35}
map.set(a, 64).set(true, 85);
console.log(map);
// Map(4) { a -> 20, 18 -> 35, 91 -> 54, (1) […] -> 64,
true -> 85 }
Différents types d’Arrays
- 87/174 -
dimanche, 6. janvier 2019 (5:16 )
J.D.B. DIASOLUKA Nz. Luyalu
JavaScript Tome-XXII
// Map(4) {"a" => 20, 18 => 35, 91 -> 54, Array(1) => 64,
true => 85}
console.log(map.size);
console.log(map.has(a));
console.log(map.has([1]));
console.log(map.get(a));
console.log(map.get(18));
console.log(map.get(true));
//
//
//
//
//
//
=>
=>
=>
=>
=>
=>
5
true
false
64
35
85
let k="+ ", v="* ";
map.forEach(function (val, key) {
v+=val + ` * `;
k+=key + ` + `;
});
console.log(k);
// => + a + 18 + 91 + 1544274283091 + true +
console.log(v);
// => * 20 * 35 * 54 * 64 * 85 *
map.delete(a);
console.log(map.size);
// => 4
console.log(map.get(a));
// => undefined
console.log(Array.from(map));
// Firefox :
// => Array(4) [ (2) […], (2) […], (2) […], (2) […] ]
// (4) […]
//
0: Array [ "a", 20 ]
//
1: Array [ 18, 35 ]
//
2: Array [ 91, 54 ]
//
3: Array [ true, 85 ]
//
length: 4
//
<prototype>: Array []
//
// Yandex :
// => (4) (4) [Array(2), Array(2), Array(2), Array(2)]
//
0: (2) ["a", 20]
//
1: (2) [18, 35]
//
2: (2) [91, 54]
//
3: (2) [true, 85]
//
length: 4
//
__proto__: Array(0)
var map = new Map([
Différents types d’Arrays
- 88/174 -
dimanche, 6. janvier 2019 (5:16 )
J.D.B. DIASOLUKA Nz. Luyalu
JavaScript Tome-XXII
['a', 56], [Date.now(), 40],
[78, 'c'], [41, Date.now()]
]);
console.log(map);
// Map(4) { a -> 56, 1544277041459 -> 40,
//
78 -> "c", 41 -> 1544277041459 }
let kya=[], vla=[];
for (var [cle, valeur] of map) {
kya=kya.concat(cle);
vla.push(valeur);
}
console.log(kya);
// Array(4) [ "a", 1544277173449, 78, 41 ]
console.log(vla);
// Array(4) [ 56, 40, "c", 1544277173449 ]
let vl = [];
for (let valeurs of map.values()){
vl=vl.concat(valeurs);
}
console.log(vl);
// Array(4) [ 56, 40, "c", 1544277643496 ]
let ky = [];
for (var cles of map.keys()){
ky.push(cles);
}
console.log(ky);
// => Array(4) [ "a", 1544277741029, 78, 41 ]
</script>
Lisez les commentaires dans le code ci-dessous :
<script type="text/javascript"> "use strict";
var a = [Date.now()];
console.log(a); // Array [ 1544273035052 ]
var map = new Map([['a', 20], [18, 35], [91, 54]]);
console.log(map);
// Firefox : Map { a -> 20, 18 -> 35, 91 -> 54 }
Différents types d’Arrays
- 89/174 -
dimanche, 6. janvier 2019 (5:16 )
J.D.B. DIASOLUKA Nz. Luyalu
JavaScript Tome-XXII
// Yandex : Map(2) {"a" => 20, 18, 91 -> 54 => 35}
map.set(a, 64).set(true, 85);
console.log(map);
// Map(4) { a -> 20, 18 -> 35, 91 -> 54, (1) […] -> 64,
true -> 85 }
// Map(4) {"a" => 20, 18 => 35, 91 -> 54, Array(1) => 64,
true => 85}
console.log(map.size);
console.log(map.has(a));
console.log(map.has([1]));
console.log(map.get(a));
console.log(map.get(18));
console.log(map.get(true));
//
//
//
//
//
//
=>
=>
=>
=>
=>
=>
5
true
false
64
35
85
let k="+ ", v="* ";
map.forEach(function (val, key) {
v+=val + ` * `;
k+=key + ` + `;
});
console.log(k);
// => + a + 18 + 91 + 1544274283091 + true +
console.log(v);
// => * 20 * 35 * 54 * 64 * 85 *
map.delete(a);
console.log(map.size);
// => 4
console.log(map.get(a));
// => undefined
console.log(Array.from(map));
// Firefox :
// => Array(4) [ (2) […], (2) […], (2) […], (2) […] ]
// (4) […]
//
0: Array [ "a", 20 ]
//
1: Array [ 18, 35 ]
//
2: Array [ 91, 54 ]
//
3: Array [ true, 85 ]
//
length: 4
//
<prototype>: Array []
//
// Yandex :
// => (4) (4) [Array(2), Array(2), Array(2), Array(2)]
//
0: (2) ["a", 20]
//
1: (2) [18, 35]
Différents types d’Arrays
- 90/174 -
dimanche, 6. janvier 2019 (5:16 )
J.D.B. DIASOLUKA Nz. Luyalu
//
2: (2) [91, 54]
//
3: (2) [true, 85]
//
length: 4
//
__proto__: Array(0)
JavaScript Tome-XXII
var map = new Map([
['a', 56], [Date.now(), 40],
[78, 'c'], [41, Date.now()]
]);
console.log(map);
// Map(4) { a -> 56, 1544277041459 -> 40,
//
78 -> "c", 41 -> 1544277041459 }
let kya=[], vla=[];
for (var [cle, valeur] of map) {
kya=kya.concat(cle);
vla.push(valeur);
}
console.log(kya);
// Array(4) [ "a", 1544277173449, 78, 41 ]
console.log(vla);
// Array(4) [ 56, 40, "c", 1544277173449 ]
let vl = [];
for (let valeurs of map.values()){
vl=vl.concat(valeurs);
}
console.log(vl);
// Array(4) [ 56, 40, "c", 1544277643496 ]
let ky = [];
for (var cles of map.keys()){
ky.push(cles);
}
console.log(ky);
// => Array(4) [ "a", 1544277741029, 78, 41 ]
</script>
Différents types d’Arrays
- 91/174 -
dimanche, 6. janvier 2019 (5:16 )
J.D.B. DIASOLUKA Nz. Luyalu
JavaScript Tome-XXII
Les « WeakMap » :
Lisez les commentaires :
<script type="text/javascript"> "use strict";
var a = [96, 10] , b = [43,[67, 84]] , c = [96, 42, 64];
var wmap = new WeakMap([[a, 1], [b, 2]]);
console.log(wmap);
// WeakMap { (2) […] -> 2, (2) […] -> 1 }
//
<entries>?
//
0: Array [ … ] ? 2
//
<key>: Array [ … ]
//
<key>: (2) […]
//
0: 96
//
1: 10
//
length: 2
//
<prototype>: Array []
//
<value>: 2
//
1: Array [ … ] ? 1
//
<key>: Array [ … ]
//
<key>: (2) […]
//
0: 43
//
1: Array [ 67, 84 ]
//
1: (2) […]
//
0: 67
//
1: 84
//
length: 2
//
<prototype>: Array []
//
length: 2
//
<prototype>: Array []
//
<value>: 2
//
<prototype>: Object { … }
wmap.set(c, 3).set(b, 4);
console.log(wmap);
// WeakMap(3) { (2) […] -> 1, (2) […] -> 4, (3) […] -> 3 }
// WeakMap(3)
//
<entries>
//
0: Array [ … ] -> 1
//
0: (2) […] ? 1
//
<key>: Array [ … ]
Différents types d’Arrays
- 92/174 -
dimanche, 6. janvier 2019 (5:16 )
J.D.B. DIASOLUKA Nz. Luyalu
//
<key>: (2) […]
//
0: 96
//
1: 10
//
length: 2
//
<prototype>: Array []
//
<value>: 1
//
1: Array [ … ] -> 4
//
1: (2) […] -> 4
//
<key>: Array [ … ]
//
<key>: (2) […]
//
0: 43
//
1: Array [ 67, 84 ]
//
length: 2
//
<prototype>: Array []
//
<value>: 4
//
2: Array(3) [ … ] -> 3
//
2: (3) […] -> 3
//
<key>: Array(3) [ … ]
//
<key>: (3) […]
//
0: 96
//
1: 42
//
2: 64
//
length: 3
//
<prototype>: Array []
//
<value>: 3
//
<prototype>: Object { … }
JavaScript Tome-XXII
console.log("wmap.has([96, 42, 64]) = ",
wmap.has([96, 42, 64])); // => false
console.log(wmap.has(c));
// => true
console.log(wmap.get(a));
console.log(wmap.get(b));
console.log(wmap.get(c));
// => 1
// => 4
// => 3
wmap.delete(b);
console.log(wmap.get(b));
</script>
// => undefined
Le « get » et le « set » avec les « weakMap » :
Différents types d’Arrays
- 93/174 -
dimanche, 6. janvier 2019 (5:16 )
J.D.B. DIASOLUKA Nz. Luyalu
JavaScript Tome-XXII
<script type="text/javascript"> "use strict";
var Oeil = (function () {
console.log("Dans « Oeil »");
var organes = new WeakMap;
console.log("this = ",this);
// this = undefined
function Oeil(lequel) {
organes.set(this, lequel);
console.log("this = ",this);
// this = Object { }
// this = Oeil {}
}
Oeil.prototype.dispOrgan = function () {
return organes.get(this);
};
Oeil.prototype.dispOrganPlus = function () {
return [organes.get(this)," Surchargé"];
};
return Oeil;
})();
console.log("Départ ...");
// Départ ...
var bruch = new Oeil('Membane de Bruch');
// Dans « Oeil »
console.log("Après « Oeil »");
// Après « Oeil »
console.log(bruch);
// Object { }
// Oeil {}
console.log(bruch.dispOrgan());
// Membane de Bruch
console.log(bruch.dispOrganPlus()[0]
, bruch.dispOrganPlus()[1]);
// Membane de Bruch Surchargé
for (var idx in bruch)
Différents types d’Arrays
- 94/174 -
dimanche, 6. janvier 2019 (5:16 )
J.D.B. DIASOLUKA Nz. Luyalu
JavaScript Tome-XXII
console.log("* for (var idx in bruch) => ",idx);
// * for (var idx in bruch) => dispOrgan
// * for (var idx in bruch) => dispOrganPlus
</script>
Différents types d’Arrays
- 95/174 -
dimanche, 6. janvier 2019 (5:16 )
J.D.B. DIASOLUKA Nz. Luyalu
Différents types d’Arrays
JavaScript Tome-XXII
- 96/174 -
dimanche, 6. janvier 2019 (5:16 )
J.D.B. DIASOLUKA Nz. Luyalu
Différents types d’Arrays
JavaScript Tome-XXII
- 97/174 -
dimanche, 6. janvier 2019 (5:16 )
J.D.B. DIASOLUKA Nz. Luyalu
JavaScript Tome-XXII
LES « SET »s :
C’est une forme d’Array d’itérables dans laquelle chaque élément ne peut
figurer qu’une seule fois, mais dont la syntaxe est similaire à celle des
« Typed Arrays ».
<script type="text/javascript"> "use strict";
let t;
const a=[14, {a:12, b:17}, 19, 14, "Inco", [14, 15], 10,
14, 15];
console.log(a);
// Array(9) [ 14, {…}, 19, 14, "Inco", (2) […], 10, 14, 15
]
// (9) […]
//
0: 14
//
1: Object { a: 12, b: 17 }
//
1: {…}
//
a: 12
//
b: 17
//
<prototype>: {…}
//
2: 19
//
3: 14
//
4: "Inco"
//
5: Array [ 14, 15 ]
//
5: (2) […]
//
0: 14
//
1: 15
//
length: 2
//
<prototype>: [
//
6: 10
//
7: 14
//
8: 15
//
length: 9
//
<prototype>: []
const st = new Set(a);
console.log(st);
// Set(7) [ 14, {…}, 19, "Inco", (2) […], 10, 15 ]
// Set(7)
//
size: 7
//
<entries>
//
0: 14
Différents types d’Arrays
- 98/174 -
dimanche, 6. janvier 2019 (5:16 )
J.D.B. DIASOLUKA Nz. Luyalu
JavaScript Tome-XXII
//
1: Object { … }
//
1: {…}
//
a: 12
//
b: 17
//
<prototype>: Object { … }
//
2: 19
//
3: "Inco"
//
4: Array [ … ]
//
4: (2) […]
//
0: 14
//
1: 15
//
length: 2
//
<prototype>: Array []
//
5: 10
//
6: 15
//
<prototype>: Object { … }
//
<prototype>: {…}
//
add: function add()
//
clear: function clear()
//
constructor: function Set()
//
delete: function delete()
//
entries: function entries()
//
forEach: function forEach()
//
has: function has()
//
keys: function values()
//
size: Getter
//
values: function values()
//
Symbol(Symbol.iterator): function values()
//
Symbol(Symbol.toStringTag): "Set"
//
<prototype>: {…}
const fl = new Float64Array(a);
console.log(fl);
// Float64Array(9) [ 14, NaN, 19, 14, NaN, NaN, 10, 14, 15
]
// Float64Array(9)
//
0: 14
//
1: NaN
//
2: 19
//
3: 14
//
4: NaN
//
5: NaN
//
6: 10
//
7: 14
Différents types d’Arrays
- 99/174 -
dimanche, 6. janvier 2019 (5:16 )
J.D.B. DIASOLUKA Nz. Luyalu
JavaScript Tome-XXII
//
8: 15
//
buffer: ArrayBuffer { byteLength: 72 }
//
buffer: ArrayBuffer
//
byteLength: 72
//
<prototype>: ArrayBufferPrototype { … }
//
<prototype>: ArrayBufferPrototype
//
byteLength: Getter
//
constructor: function ArrayBuffer()
//
slice: function slice()
//
Symbol(Symbol.toStringTag): "ArrayBuffer"
//
<prototype>: {…
//
byteLength: 72
//
byteOffset: 0
//
length: 9
//
<prototype>: Float64ArrayPrototype { … }
//
<prototype>: Float64ArrayPrototype
//
BYTES_PER_ELEMENT: 8
//
constructor: function Float64Array()
//
constructor: Float64Array()
//
BYTES_PER_ELEMENT: 8
//
length: 3
//
name: "Float64Array"
//
prototype: Float64ArrayPrototype { … }
//
<prototype>: TypedArray()
//
from: function from()
//
length: 0
//
name: "TypedArray"
//
of: function of()
//
prototype: TypedArrayPrototype { … }
//
Symbol(Symbol.species): Getter
//
<prototype>: ()
//
apply: function apply()
//
arguments: null
//
bind: function bind()
//
call: function call()
//
caller: null
//
constructor: function Function()
//
length: 0
//
name: ""
//
toSource: function toSource()
//
toString: function toString()
//
Symbol(Symbol.hasInstance):
//
function Symbol.hasInstance()
//
<prototype>: {…}
Différents types d’Arrays
- 100/174 -
dimanche, 6. janvier 2019 (5:16 )
J.D.B. DIASOLUKA Nz. Luyalu
JavaScript Tome-XXII
//
<prototype>: TypedArrayPrototype { … }
//
<prototype>: TypedArrayPrototype
//
buffer: Getter
//
byteLength: Getter
//
byteOffset: Getter
//
constructor: function TypedArray()
//
copyWithin: function copyWithin()
//
entries: function entries()
//
every: function every()
//
fill: function fill()
//
filter: function filter()
//
find: function find()
//
findIndex: function findIndex()
//
forEach: function forEach()
//
includes: function includes()
//
indexOf: function indexOf()
//
join: function join()
//
keys: function keys()
//
lastIndexOf: function lastIndexOf()
//
length: Getter
//
map: function map()
//
reduce: function reduce()
//
reduceRight: function reduceRight()
//
reverse: function reverse()
//
set: function set()
//
slice: function slice()
//
some: function some()
//
sort: function sort()
//
subarray: function subarray()
//
toLocaleString: function toLocaleString()
//
toString: function toString()
//
values: function values()
//
Symbol(Symbol.iterator): function values()
//
Symbol(Symbol.toStringTag): Getter
//
<prototype>: {…}
t = "";
for (let e of st) {
t += " => " + e + " : " + e % 2 + "\n";
}
console.log("Impaire ?\n", t);
// Impaire ?
//
=> 14 : 0
Différents types d’Arrays
- 101/174 -
dimanche, 6. janvier 2019 (5:16 )
J.D.B.
//
//
//
//
DIASOLUKA Nz. Luyalu
=> [object Object] : NaN
=> 19 : 1
=> Inco : NaN
=> 14,15,10,14,15 : NaN
JavaScript Tome-XXII
t = "";
for (let e of fl) {
t += " => " + e + " : " + e % 2 + "\n";
}
console.log("Impaire ?\n", t);
// Impaire ?
//
=> 14 : 0
//
=> NaN : NaN
//
=> 19 : 1
//
=> 14 : 0
//
=> NaN : NaN
//
=> NaN : NaN
</script>
Exécution avec Firefox :
Exécution avec Yandex :
Les propriétés de « Set » sont les suivantes :
Différents types d’Arrays
- 102/174 -
dimanche, 6. janvier 2019 (5:16 )
J.D.B. DIASOLUKA Nz. Luyalu
Différents types d’Arrays
JavaScript Tome-XXII
- 103/174 -
dimanche, 6. janvier 2019 (5:16 )
J.D.B. DIASOLUKA Nz. Luyalu
JavaScript Tome-XXII
<script type="text/javascript"> "use strict";
var set = new Set(
['azui', 'motuka', 'bilamba', 'azui', 'motuka', 'keba']
);
console.log(set);
// Set(4) [ "azui", "motuka", "bilamba", "keba" ]
// Set(4)
//
size: 7
//
<entries>
//
0: "azui"
//
1: "motuka"
//
2: "bilamba"
//
3: "keba"
//
<prototype>: Object { ... }
set.add('dendo').add('bilamba').add('dendo');
console.log(set);
// Set(5) [ "azui", "motuka", "bilamba", "keba", "dendo" ]
set.delete('boni');
console.log(set);
// Set(5) [ "azui", "motuka", "bilamba", "keba", "dendo" ]
set.delete('bilamba');
console.log(set);
// Set(4) [ "azui", "motuka", "keba", "dendo" ]
console.log("set.size = ", set.size);
// set.size = 4
console.log("set.has('dendon') = ",
set.has('dendon'));
// set.has('dendon') = false
console.log("set.has('dendo') = ", set.has('dendo'));
// set.has('dendo') = true
set.forEach(function (it) {
console.log(it);
// azui
// motuka
// keba
// dendo
});
</script>
Différents types d’Arrays
- 104/174 -
dimanche, 6. janvier 2019 (5:16 )
J.D.B. DIASOLUKA Nz. Luyalu
JavaScript Tome-XXII
Une application de « Set » c’est la gestion des mots-clés, qui ne doivent
figurer qu’une seule fois dans la liste. De là vous n’avez qu’à faire un « copier-coller » légal et légitime :
<script type="text/javascript"> "use strict";
let s = new Set([
"destructuring", "destructuration", "map", "every",
"filter", "find", "fndIndex", "destructuring",
"forEach", "destructuring", "from", "map",
"indexOf", "isArray", "join", "lastIndexOf",
"destructuring", "length", "map", "splice",
"destructuring", "includes", "map", "push", "of",
"pop", "concat", "destructuring", "reduce",
"reduceRight", "reverse", "shift", "slice", "some",
"sort", "delete", "destructuring", "unshift", map",
"Array", "destructuring", "objet global",
"destructuring", "constructeur", "tableaux",
"destructuring", "objets de haut-niveau",
"javascript", "ecmascript", "name", "map",
"destructuring", "prototype"]);
let arr= s, t="";
for(let i of arr){
t+=i+", "
}
console.log(t);
/*******/
let r = Array.from(s);
t="";
r.forEach(x => t+=x+", ")
console.log(t);
</script>
Différents types d’Arrays
- 105/174 -
dimanche, 6. janvier 2019 (5:16 )
J.D.B. DIASOLUKA Nz. Luyalu
JavaScript Tome-XXII
Gestion du contenu d’un « Set » :
<script type="text/javascript"> "use strict";
var set = new Set(
[94, "string", [25, 93], 50, "string", 94, [25, 93]]
);
console.log(set); //
// Set(5) [ 94, "string", (2) […], 50, (2) […] ]
//
size: 5
//
<entries>
//
0: 94
//
1: "string"
//
2: Array [ … ]
//
2: (2) […]
//
0: 25
//
1: 93
//
length: 2
//
<prototype>: Array []
//
3: 50
//
4: Array [ … ]
//
4: (2) […]
//
0: 25
//
1: 93
//
length: 2
Différents types d’Arrays
- 106/174 -
dimanche, 6. janvier 2019 (5:16 )
J.D.B. DIASOLUKA Nz. Luyalu
//
<prototype>: Array []
//
<prototype>: Object { … }
JavaScript Tome-XXII
console.log(Array.from(set));
// Array(4) [ 94, (2) […], 50, (2) […] ]
// (4) […]
//
0: 94
//
1: "string"
//
2: Array [ 25, 93 ]
//
2: (2) […]
//
0: 25
//
1: 93
//
length: 2
//
<prototype>: Array []
//
3: 50
//
4: Array [ 25, 93 ]
//
4: (2) […]
//
0: 25
//
1: 93
//
length: 2
//
<prototype>: Array []
//
length: 5
//
<prototype>: Array []
let t="";
for (let v of set) t+=v + ` | `;
console.log(t);
// 94 | string | 25,93 | 50 | 25,93 |
// Il n'a pas supprimé le deuxième [25, 93],
// mais il a supprimé le doublon de « 94 »
// et celui de « string ».
let k="",v="";
for (var [cle, val] of set.entries()) {
k+=cle + " | " ;
v+=val + " | " ;
}
console.log(k);
// 94 | string | 25,93 | 50 | 25,93 |
k="";
for (var cle of set.keys()) k+= cle + " | ";
console.log(k);
Différents types d’Arrays
- 107/174 -
dimanche, 6. janvier 2019 (5:16 )
J.D.B. DIASOLUKA Nz. Luyalu
// 94 | string | 25,93 | 50 | 25,93 |
JavaScript Tome-XXII
v="";
for (var val of set.values()) v+= val + " | ";
console.log(v);
// 94 | string | 25,93 | 50 | 25,93 |
</script>
Différents types d’Arrays
- 108/174 -
dimanche, 6. janvier 2019 (5:16 )
J.D.B. DIASOLUKA Nz. Luyalu
JavaScript Tome-XXII
LES « WEAKSETS » :
<script type="text/javascript"> "use strict";
var a = ["jmois", 9, 12], b = ["annee", 2018], c = [10];
// Définition 3 variables distinctes.
// a <= array à 3 éls : stg, num, num
// b <= array à 2 éls : stg et num
// c <= array à un seul él numérique
console.log("a = ", a); // a = Array(3) [ "jmois", 9, 12 ]
console.log("b = ", b); // b = Array [ "annee", 2018 ]
console.log("c = ", c); // c = Array [ 10 ]
var wset = new WeakSet([a, b, a]);
// Constitution d'un « weakSet » en
// proposant deux fois l'array « a »,
// qui ne sera retenu qu'une seule fois.
console.log("wset = ", wset);
// wset = WeakSet [ (3) […], (2) […] ]
wset.add(c).add(b).add(c);
// Ajout d'éléments à la weakSet,
// « b » faisant déjà partie de « wset »,
// « c » proposé deux fois et ne faisant
// pas déjà partie de « wset ».
console.log("wset = ", wset);
// wset = WeakSet(3) [ (1) […], (3) […], (2) […] ]
console.log(".!. Attention .!.");
console.log(`wset.has([10]) = `, wset.has([10]));
// wset.has([10]) = false
console.log("wset.has(c) = ", wset.has(c));
// wset.has(c) = true
wset.delete(c);
console.log("wset.has(c) = ", wset.has(c));
// wset.has(c) = false
console.log("wset = ", wset);
// wset = WeakSet [ (3) […], (2) […] ]
</script>
Différents types d’Arrays
- 109/174 -
dimanche, 6. janvier 2019 (5:16 )
J.D.B. DIASOLUKA Nz. Luyalu
JavaScript Tome-XXII
Avec Firefox Quantm 64.0b13 :
Différents types d’Arrays
- 110/174 -
dimanche, 6. janvier 2019 (5:16 )
J.D.B. DIASOLUKA Nz. Luyalu
JavaScript Tome-XXII
Avec Yandex Version 18.11.1.385 beta :
Différents types d’Arrays
- 111/174 -
dimanche, 6. janvier 2019 (5:16 )
J.D.B. DIASOLUKA Nz. Luyalu
Différents types d’Arrays
JavaScript Tome-XXII
- 112/174 -
dimanche, 6. janvier 2019 (5:16 )
J.D.B. DIASOLUKA Nz. Luyalu
JavaScript Tome-XXII
Si vous remplacez « weakSet » par « Set » vous obtiendrez le résultat suivant :
<script type="text/javascript"> "use strict";
var a = ["jmois", 9, 12], b = ["annee", 2018], c = [10];
// Définition 3 variables distinctes.
// a <= array à 3 éls : stg, num, num
// b <= array à 2 éls : stg et num
// c <= array à un seul él numérique
console.log("a = ", a); // a = Array(3) [ "jmois", 9, 12 ]
console.log("b = ", b); // b = Array [ "annee", 2018 ]
console.log("c = ", c); // c = Array [ 10 ]
var set = new Set([a, b, a]);
// Constitution d'un « weakSet » en
// proposant deux fois l'array « a »,
// qui ne sera retenu qu'une seule fois.
console.log("set = ", set);
// set = WeakSet [ (3) […], (2) […] ]
set.add(c).add(b).add(c);
Différents types d’Arrays
- 113/174 -
dimanche, 6. janvier 2019 (5:16 )
J.D.B. DIASOLUKA Nz. Luyalu
JavaScript Tome-XXII
// Ajout d'éléments à la weakSet,
// « b » faisant déjà partie de « set »,
// « c » proposé deux fois et ne faisant
// pas déjà partie de « set ».
console.log("set = ", set);
// set = WeakSet(3) [ (1) […], (3) […], (2) […] ]
console.log(".!. Attention .!.");
console.log(`set.has([10]) = `, set.has([10]));
// set.has([10]) = false
console.log("set.has(c) = ", set.has(c));
// set.has(c) = true
set.delete(c);
console.log("set.has(c) = ", set.has(c));
// set.has(c) = false
console.log("set = ", set);
// set = WeakSet [ (3) […], (2) […] ]
</script>
<!--script type="text/javascript"> "use strict";
var a = [1] , b = [2] , c = [3];
var wmap = new WeakMap([[a, 1], [b, 2]]);
wmap.set(c, 3).set(b, 4);
console.log(wmap.has(a));
console.log(wmap.has([1]));
console.log(wmap.get(a));
wmap.delete(a);
console.log(wmap.get(a));
// => true
// => false
// => 1
// => undefined
// Private properties store:
var Person = (function () {
var names = new WeakMap;
function Person(name) {
names.set(this, name);
}
Person.prototype.getName = function () {
return names.get(this);
Différents types d’Arrays
- 114/174 -
dimanche, 6. janvier 2019 (5:16 )
J.D.B. DIASOLUKA Nz. Luyalu
};
return Person;
})();
JavaScript Tome-XXII
var person = new Person('Vasya');
console.log(person.getName());
// => 'Vasya'
for (var key in person)
console.log(key); // => only 'getName'
</script>
Différents types d’Arrays
- 115/174 -
dimanche, 6. janvier 2019 (5:16 )
J.D.B. DIASOLUKA Nz. Luyalu
JavaScript Tome-XXII
LES « DICT ionaries » :
Différents types d’Arrays
- 116/174 -
dimanche, 6. janvier 2019 (5:16 )
J.D.B. DIASOLUKA Nz. Luyalu
JavaScript Tome-XXII
L’OBJET ARRAYBUFFER :
Un objet particulier est le « ArrayBuffer » (littéralement « tampon de tableau »). C’est un espace-mémoire qu’on réserve pour des éléments
d’Arrays typées, de taille connue.
<script type="text/javascript"> "use strict";
// create an ArrayBuffer with a size in bytes
const buffer = new ArrayBuffer(10);
// Réserver 10 places en Bytes ds ArrayBuffer
console.log(buffer);
console.log(buffer.byteLength);
const uint8 = new Uint8Array(buffer, 3);
// Réserver des places pour des entiers non
// signés dans ArrayBuffer depuis l'offset 4
console.log(uint8);
console.log(uint8.byteLength);
uint8.fill(Math.round(Math.random()*10));
// Remplir tous les Bytes réservés
console.log(uint8);
</script>
Différents types d’Arrays
- 117/174 -
dimanche, 6. janvier 2019 (5:16 )
J.D.B. DIASOLUKA Nz. Luyalu
JavaScript Tome-XXII
Exemple :
<script type="text/javascript">
//
var buffer = new ArrayBuffer(10);
//
var float32 = new Float32Array(buffer);
// Avec YANDEX : Uncaught RangeError:
Différents types d’Arrays
- 118/174 -
dimanche, 6. janvier 2019 (5:16 )
J.D.B. DIASOLUKA Nz. Luyalu
JavaScript Tome-XXII
// byte length of Float32Array should be a multiple of 4
// at new Float32Array (<anonymous>)
at test.html:3
//
// Avec Firefox : RangeError:
// attempting to construct out-of-bounds TypedArray
// on ArrayBuffer
test.html:3:16
var buffer = new ArrayBuffer(12);
console.log("buffer = new ArrayBuffer(12) =",buffer);
console.log("buffer.toString() =",buffer.toString());
console.log("Object.getOwnPropertyDescriptors(buffer) =",
Object.getOwnPropertyDescriptors(buffer));
console.log("");
var float32 = new Float32Array(buffer);
console.log("float32 = new Float32Array(buffer) =",
float32);
console.log("float32.byteLength =",float32.byteLength);
console.log("float32.length =",float32.length);
console.log("float32.buffer.byteLength=",
float32.buffer.byteLength);
</script>
Exécution avec YANDEX :
buffer = new ArrayBuffer(12) = ArrayBuffer(12) {}
test.html:16
buffer.toString() = [object ArrayBuffer]
test.html:17
Object.getOwnPropertyDescriptors(buffer) = {}
test.html:23
float32 = new Float32Array(buffer) =
Float32Array(3) [0, 0, 0]
test.html:25
test.html:26
test.html:28
Différents types d’Arrays
float32.byteLength = 12
float32.length = 3
float32.buffer.byteLength= 12
- 119/174 -
dimanche, 6. janvier 2019 (5:16 )
J.D.B. DIASOLUKA Nz. Luyalu
JavaScript Tome-XXII
test.html:15 buffer = new ArrayBuffer(12) = ArrayBuffer(12) {}
1. ArrayBuffer(12) {}
1. [[Int8Array]]: Int8Array(12) [0,0,0,0,0,0,0,0,0,0,0,0]
2. [[Int16Array]]: Int16Array(6) [0, 0, 0, 0, 0, 0]
3. [[Int32Array]]: Int32Array(3) [0, 0, 0]
1.
2.
3.
4.
5.
6.
7.
8.
9.
0: 0
1: 0
2: 0
buffer: (...)
byteLength: (...)
byteOffset: (...)
length: (...)
Symbol(Symbol.toStringTag): (...)
__proto__: TypedArray
1. BYTES_PER_ELEMENT: 4
2. buffer: (...)
3. byteLength: (...)
4. byteOffset: (...)
5. constructor: ƒ Int32Array()
6. length: (...)
7. Symbol(Symbol.toStringTag): (...)
8. __proto__: Object
4. [[Uint8Array]]: Uint8Array(12) [0,0,0,0,0,0,0,0,0,0,0,0]
5. byteLength: (...)
6. __proto__: ArrayBuffer
1. byteLength: (...)
2. constructor: ƒ ArrayBuffer()
1. arguments: (...)
2. caller: (...)
3. isView: ƒ isView()
4. length: 1
5. name: "ArrayBuffer"
6. prototype: ArrayBuffer {constructor: ƒ, slice: ƒ, Symb
ol(Symbol.toStringTag): "ArrayBuffer"}
7. Symbol(Symbol.species): (...)
8. get Symbol(Symbol.species): ƒ [Symbol.species]()
9. __proto__: ƒ ()
10. [[Scopes]]: Scopes[0]
3. slice: ƒ slice()
Différents types d’Arrays
- 120/174 -
dimanche, 6. janvier 2019 (5:16 )
J.D.B. DIASOLUKA Nz. Luyalu
JavaScript Tome-XXII
4. Symbol(Symbol.toStringTag): "ArrayBuffer"
5. get byteLength: ƒ byteLength()
6. __proto__: Object
test.html:23
float32
Float32Array(3) [0, 0, 0]
=
new
Float32Array(buffer)
1. Float32Array(3) [0, 0, 0]
1. 0: 0
2. 1: 0
3. 2: 0
4. buffer: (...)
5. byteLength: (...)
6. byteOffset: (...)
7. length: (...)
8. Symbol(Symbol.toStringTag): (...)
9. __proto__: TypedArray
1. BYTES_PER_ELEMENT: 4
2. buffer: (...)
3. byteLength: (...)
4. byteOffset: (...)
5. constructor: ƒ Float32Array()
6. length: (...)
7. Symbol(Symbol.toStringTag): (...)
8. __proto__: Object
Exécution Avec FireFox :
buffer = new ArrayBuffer(12) = ArrayBuffer { byteLength: 12 }
test.html:15:5
buffer.toString() = [object ArrayBuffer]
test.html:16:5
Object.getOwnPropertyDescriptors(buffer) = Object { }
test.html:17:5
float32 = new Float32Array(buffer) = Float32Array(3) [0, 0, 0]
Différents types d’Arrays
- 121/174 -
dimanche, 6. janvier 2019 (5:16 )
=
J.D.B. DIASOLUKA Nz. Luyalu
test.html:23:5
JavaScript Tome-XXII
float32.byteLength = 12
float32.length = 3
float32.buffer.byteLength= 12
test.html:25:5
test.html:26:5
test.html:27:2
buffer = new ArrayBuffer(12) = ArrayBuffer { byteLength: 12 }
test.html:15:5
ArrayBuffer { byteLength: 12 }
ArrayBuffer
byteLength: 12
<prototype>: ArrayBufferPrototype { … }
byteLength: Getter
constructor: function ArrayBuffer()
slice: function slice()
Symbol(Symbol.toStringTag): "ArrayBuffer"
<prototype>: Object { … }
Object.getOwnPropertyDescriptors(buffer) = Object { }
test.html:17:5
{}
<prototype>: Object { … }
__defineGetter__: function __defineGetter__()
__defineSetter__: function __defineSetter__()
__lookupGetter__: function __lookupGetter__()
__lookupSetter__: function __lookupSetter__()
constructor: function Object()
hasOwnProperty: function hasOwnProperty()
isPrototypeOf: function isPrototypeOf()
propertyIsEnumerable:
function propertyIsEnumerable()
toLocaleString: function toLocaleString()
toSource: function toSource()
toString: function toString()
valueOf: function valueOf()
Différents types d’Arrays
- 122/174 -
dimanche, 6. janvier 2019 (5:16 )
J.D.B. DIASOLUKA Nz. Luyalu
JavaScript Tome-XXII
float32 = new Float32Array(buffer) = Float32Array(3) [0, 0, 0]
test.html:23:5
Float32Array(3)
0: 0
1: 0
2: 0
buffer: ArrayBuffer { byteLength: 12 }
byteLength: 12
byteOffset: 0
length: 3
<prototype>: Float32ArrayPrototype { … }
Structure interne d’un « ArrayBuffer » en tapant ce mot à la ligne de
commande de la console du navigateur :
Avec Firefox :
Différents types d’Arrays
- 123/174 -
dimanche, 6. janvier 2019 (5:16 )
J.D.B. DIASOLUKA Nz. Luyalu
JavaScript Tome-XXII
Avec Yandex :
Différents types d’Arrays
- 124/174 -
dimanche, 6. janvier 2019 (5:16 )
J.D.B. DIASOLUKA Nz. Luyalu
Différents types d’Arrays
JavaScript Tome-XXII
- 125/174 -
dimanche, 6. janvier 2019 (5:16 )
J.D.B. DIASOLUKA Nz. Luyalu
Différents types d’Arrays
JavaScript Tome-XXII
- 126/174 -
dimanche, 6. janvier 2019 (5:16 )
J.D.B. DIASOLUKA Nz. Luyalu
JavaScript Tome-XXII
LES STRINGS :
Les Strings ne sont structurellement ni plus ni moins qu’une forme spéciale d’Array d’éléments de même nature et même taille (des valeurs entières non-signées représentées sur 16 bits) avec des propriétés et méthodes en plus ou en moins dans leurs constructeurs et leurs prototypes,
par rapport aux Arrays. Les éléments y sont indexés, ordonnés dans le
même ordre que dans la chaîne saisie, et numérotés à partir de l’indice 0
(zéro). Voici ce qu’on obtient à la console.
>> Object.getOwnPropertyDescriptors("Dias")
Object { 0: {…}, 1: {…}, 2: {…}, 3: {…}, length: {…} }
==========
>> Object.getOwnPropertyDescriptors(["D","i","a","s"])
Object { 0: {…}, 1: {…}, 2: {…}, 3: {…}, length: {…} }
====================
>> Object.getOwnPropertyDescriptors("Dias")
{…}
0: Object { value: "D", writable: false, enumerable:
1: Object { value: "i", writable: false, enumerable:
2: Object { value: "a", writable: false, enumerable:
3: Object { value: "s", writable: false, enumerable:
length: Object { value: 4, writable: false,
false, … }
true, … }
true, … }
true, … }
true, … }
enumerable:
<prototype>: Object { … }
__defineGetter__: function __defineGetter__()
__defineSetter__: function __defineSetter__()
__lookupGetter__: function __lookupGetter__()
__lookupSetter__: function __lookupSetter__()
constructor: function Object()
hasOwnProperty: function hasOwnProperty()
isPrototypeOf: function isPrototypeOf()
propertyIsEnumerable: function propertyIsEnumerable()
toLocaleString: function toLocaleString()
toSource: function toSource()
Différents types d’Arrays
- 127/174 -
dimanche, 6. janvier 2019 (5:16 )
J.D.B. DIASOLUKA Nz. Luyalu
toString: function toString()
valueOf: function valueOf()
JavaScript Tome-XXII
==========
>> Object.getOwnPropertyDescriptors(["D","i","a","s"])
{…}
0: Object { value: "D", writable: true, enumerable: true, … }
1: Object { value: "i", writable: true, enumerable: true, … }
2: Object { value: "a", writable: true, enumerable: true, … }
3: Object { value: "s", writable: true, enumerable: true, … }
length: Object { value: 4, writable: true, enumerable:
false, … }
<prototype>: Object { … }
__defineGetter__: function __defineGetter__()
__defineSetter__: function __defineSetter__()
__lookupGetter__: function __lookupGetter__()
__lookupSetter__: function __lookupSetter__()
constructor: function Object()
hasOwnProperty: function hasOwnProperty()
isPrototypeOf: function isPrototypeOf()
propertyIsEnumerable: function propertyIsEnumerable()
toLocaleString: function toLocaleString()
toSource: function toSource()
toString: function toString()
valueOf: function valueOf()
Exemple dans un code :
<script type = "text/javascript">
var str = "Un chasseur sachant chasser sans son chien est un
bon chasseur";
console.log("str = ", str);
console.log("str.slice(5,10)", str.slice(5,10));
console.log("str = ", str);
console.log("str.fill(5,10)", str.fill(5,10));
console.log("str = ", str);
</script>
Différents types d’Arrays
- 128/174 -
dimanche, 6. janvier 2019 (5:16 )
J.D.B. DIASOLUKA Nz. Luyalu
JavaScript Tome-XXII
str = Un chasseur sachant chasser sans son chien est un bon
chasseur
test.html:3:4
str.slice(5,10) asseu
test.html:5:4
str = Un chasseur sachant chasser sans son chien est un bon
chasseur
test.html:6:4
TypeError: str.fill is not a function
test.html:8:34
Les chaînes de caractères en JavaScript sont immuables, c’est-à-dire que
contrairement au langage C, en JavaScript une fois une chaîne créée, elle
ne peut plus être modifiée.
Mais la lecture des parties de la chaîne, la concaténation et le remplacement via une « expression régulière » restent possibles, ce qui en fait ne
modifient pas la partie du texte déjà saisi (sauf avec l’expression régulière).
Mais aussi on peut saisir une nouvelle chaîne dans la même variable (mais
qui naturellement n’aura pas nécessaireent la même taille), mais cela nous
permet une astuce de contourner cette restriction : la modification/mutation d’une chaîne [de caractères] dans JavaScript.
À la console du browser :
Différents types d’Arrays
- 129/174 -
dimanche, 6. janvier 2019 (5:16 )
J.D.B. DIASOLUKA Nz. Luyalu
JavaScript Tome-XXII
Dans un code :
<script type = "text/javascript"> "use strict";
let s = "DiaHoluka";
console.log(s);
let a = Array.from(s);
console.log(a);
a[3] = "s"
console.log(a);
s = a.join()
console.log(s);
s = s.replace(/,/g, e => "");
console.log(s);
</script>
Différents types d’Arrays
- 130/174 -
dimanche, 6. janvier 2019 (5:16 )
J.D.B. DIASOLUKA Nz. Luyalu
JavaScript Tome-XXII
Si on ne maîtrise pas les « expressions régulières » ou si on ne veut pas
les utiliser, on peut bien sûr mettre ce processus dans une fonction :
<script type = "text/javascript"> "use strict";
// Contrairement aux fonctions traditionnelles,
// une fonction fléchée DOIT être définie
// AVANT sa première utilisation.
const sreplace = (str,pos,substr) => {
const a = Array.from(str);
a[pos]=substr;
return a.join().replace(/,/g, e => "");
}
const s = "DiaHoluka";
console.log(s); // DiaHoluka
console.log(sreplace("DiaHoluka",3,"s"));
// Diasoluka
console.log(sreplace("DiaHoluka",4,"salé"));
// DiaHsaléluka
</script>
Notez que la chaîne initiale reste intacte :
Différents types d’Arrays
- 131/174 -
dimanche, 6. janvier 2019 (5:16 )
J.D.B. DIASOLUKA Nz. Luyalu
JavaScript Tome-XXII
La taille ou longueur (length) d'une chaîne de caractères est le nombre
d'éléments 16 bits que la chaîne contient :
L’opérateur « ... » (spread operator) convertit une String en une Array dont
les éléments restent dans l’Arrayt quand le tout est entouré de crochets, et
seulement affichés quand le tout n’est pas entouré de crochets.
<script> "use strict";
console.log(new Date().getFullYear());
console.log(`${new Date().getFullYear()}`);
console.log(...`${new Date().getFullYear()}`);
console.log([...`${new Date().getFullYear()}`]);
console.log("=".repeat(33));
for(let i of [...`${new Date().getFullYear()}`])
console.log(i);
</script>
Pour extraire uns sous-chaîne d’une autre chaîne :
Différents types d’Arrays
- 132/174 -
dimanche, 6. janvier 2019 (5:16 )
J.D.B. DIASOLUKA Nz. Luyalu
JavaScript Tome-XXII
Pour manipuler/extraire chaque caractère d’une chaîne, on peut utiliser la
boucle « for…of » :
<script> "use strict";
for (let i of 'Année 2018')
console.log(i);
</script>
Différents types d’Arrays
- 133/174 -
dimanche, 6. janvier 2019 (5:16 )
J.D.B. DIASOLUKA Nz. Luyalu
JavaScript Tome-XXII
UN MÉLIMÉLO DES MÉTHODES DE STRING :
<script> "use strict";
console.log("Diasoluka".includes("sol"));
console.log("Diasoluka".search("sol"));
console.log("Diasoluka".indexOf("sol"));
console.log("Diasoluka".lastIndexOf("a"));
console.log("Diasoluka".substr(3,3));
console.log("Diasoluka".substring(3,6));
console.log("Diasoluka".endsWith("luka"));
console.log("Diasoluka".endsWith("oluk",8));
console.log("Diasoluka".endsWith("solu",7));
console.log("Diasoluka".startsWith("Diaso"));
console.log("Diasoluka".startsWith("diaso"));
console.log("Diasoluka".startsWith("solu",3));
console.log("Diasoluka".slice(2,5));
console.log("Diasoluka".slice(-5,-1));
console.log("DiaSolUka".toLocaleLowerCase());
console.log(`"
DiaSolUka
// "
DIASOLUKA
"
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
true
3
3
8
sol
sol
true
true
true
true
false
true
aso
oluk
diasoluka
"`.toLocaleUpperCase());
console.log("'"+`${"
// 'DiaSolUka'
DiaSolUka
".trim()}`+"'");
console.log("'"+`${"
// 'DiaSolUka '
DiaSolUka
".trimLeft()}`+"'");
console.log("'"+`${"
// 'DiaSolUka '
DiaSolUka
".trimStart()}`+"'");
console.log("'"+`${"
// ' DiaSolUka'
DiaSolUka
".trimRight()}`+"'");
console.log("'"+`${"
// ' DiaSolUka'
DiaSolUka
".trimEnd()}`+"'");
console.log("Diasoluka".split("a"));
// (3) ["Di", "soluk", ""]
Différents types d’Arrays
- 134/174 -
dimanche, 6. janvier 2019 (5:16 )
J.D.B. DIASOLUKA Nz. Luyalu
JavaScript Tome-XXII
console.log("Diasoluka".replace(/[aeiouy]/g, e => "_"));
// D__s_l_k_
console.log("Diasoluka".replace(/[aeiouy]/g, e => ""));
// Dslk
console.log("Diasoluka".replace(/[aeiouy]/g, e =>
`${Math.round(Math.random()*10)}`));
// D98s4l9k4
console.log("Diasoluka".match("solu"));
// ["solu", index: 3, input: "Diasoluka", groups: undefined]
console.log(`so${Math.pow(2,10)}lu`);
// so1024lu
console.log(`so\nlu`);
// so
// lu
console.log(String.raw`so\nlu`);
// ["solu", index: 3, input: "Diasoluka", groups: undefined]
let n=Number(40);
console.log(typeof n.toString());
// string
console.log(typeof n.toString().valueOf()); // string
console.log(typeof n.toLocaleString());
// string
console.log("Teuf ".repeat(3));
console.log("Teuf".padStart(10,"-"));
console.log("Teuf".padEnd(10,"-"));
//
// Teuf Teuf Teuf
// ------Teuf
// Teuf------
console.log(String("Teuf").padLeft (10,"-"));
// TypeError: String(...).padLeft is not a function
//
console.log("Teuf".padRight (10,"-"));
// TypeError: "Teuf".padRight is not a function
</script>
« TypeCasting » vers une String :
Différents types d’Arrays
- 135/174 -
dimanche, 6. janvier 2019 (5:16 )
J.D.B. DIASOLUKA Nz. Luyalu
JavaScript Tome-XXII
Au besoin, la fonction « String(obj) » ou la méthode « obj.toString() »
convertissent la valeur primitive d’un objet en chaîne.
<script type="text/javascript"> "use strict";
var x = _ => ["A",1,{a:"a"},["y",{2:"deux"}]];
console.log(x().toString());
// A,1,[object Object],y,[object Object]
console.log(String(x()));
// A,1,[object Object],y,[object Object]
</script>
Object . toString ( ) s’applique aux objets suivants :
Object
Behavior
Array
Elements of an Array are converted to strings. The resulting strings are
concatenated, separated by commas.
Boolean
If the Boolean value is true, returns "true". Otherwise, returns "false".
Date
Returns the textual representation of the date.
Error
Returns a string containing the associated error message.
Function
Returns a string of the following form, where functionname is the
name of the function whose toString method was called:
function functionname( ) { [native code] }
Number
Returns the textual representation of the number.
Différents types d’Arrays
- 136/174 -
dimanche, 6. janvier 2019 (5:16 )
J.D.B. DIASOLUKA Nz. Luyalu
JavaScript Tome-XXII
Object
Behavior
String
Returns the value of the String object.
Default
Returns "[object objectname]", where objectname is the name of the
object type.
La méthode « .toString » permet aussi de convertir un nombre d’une
base de numération vers une autre.
<script type="text/javascript"> "use strict";
function CreateRadixTable (){
// Create table heading.
console.log("Hex".padStart(3," ")+
"Dec".padStart(6," ")+"Bin".padStart(9," ")+
"Oct".padStart(6," "))
for (var x = 0; x <= 32; x++) {
var s = "";
// Convert to hexadecimal.
s += (x.toString(16)).padStart(3," ");
// Convert to decimal.
s += (x.toString(10)).padStart(6," ")
// Convert to binary.
s += (x.toString(2)).padStart(9," ")
// Convert to octal.
s += (x.toString(8)).padStart(6," ")
console.log(s);
}
}
CreateRadixTable ();
</script>
Différents types d’Arrays
- 137/174 -
dimanche, 6. janvier 2019 (5:16 )
J.D.B. DIASOLUKA Nz. Luyalu
JavaScript Tome-XXII
Exécution :
Hex Dec Bin Oct
0 0 0 0
1 1 1 1
2 2 10 2
3 3 11 3
4 4 100 4
5 5 101 5
6 6 110 6
7 7 111 7
8 8 1000 10
9 9 1001 11
a 10 1010 12
b 11 1011 13
c 12 1100 14
d 13 1101 15
e 14 1110 16
f 15 1111 17
10
11
12
13
14
15
16
17
18
19
1a
1b
1c
1d
1e
1f
20
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
10000 20
10001 21
10010 22
10011 23
10100 24
10101 25
10110 26
10111 27
11000 30
11001 31
11010 32
11011 33
11100 34
11101 35
11110 36
11111 37
100000 40
Pour vérifier si une chaîne commence ou se termine par une souis-chaîne
donnée on peut utiliser les méthodes « startsWith() », « endsWith() »,
substr(d , L), substring(d , d+L).
startsWith(), endsWith(), substr(d , L), substring(d , d+L) :
<script type="text/javascript"> "use strict";
console.log("abcde".startsWith("cd",2)) // true
console.log("abcde".endsWith("de")) // true
console.log("abcdef".substr(2,3)=="cde") // true (d, L)
console.log("abcdefg".substring(2,5)=="cde")
// false (d, d+L) ou (d, F-1)
console.log("«"+"abcdefg".substr("b","d")+"»")
// vide
console.log("«"+"abcdefg".substring("b","d")+"»")
// vide
console.log("«"+"abcdefg".substr("c")+"»") // Tout
console.log("«"+"abcdefg".substring("c")+"»") // Tout
console.log("«"+"abcdefg".substr()+"»") // Tout
Différents types d’Arrays
- 138/174 -
dimanche, 6. janvier 2019 (5:16 )
J.D.B. DIASOLUKA Nz. Luyalu
JavaScript Tome-XXII
console.log("«"+"abcdefg".substring()+"»") // Tout
</script>
localeCompare , search :
<script type="text/javascript"> "use strict";
console.log("ddd".localeCompare("ddd")) // 0
console.log("ddd".localeCompare("ddc")) // 1
console.log("ddd".localeCompare("dde")) // -1
console.log("ddda".localeCompare("ddd")) // 1
console.log("ddd".localeCompare("ddda")) // -1
console.log("ddd".search("ddd")) // 0
console.log("abcabc".search("ca")) // 2
console.log("ddd".search("ddda")) // -1
console.log("abcabcabc".match("bc")) // Array ["bca"]
console.log("abcabc".match("bcd")) // null
</script>
Différents types d’Arrays
- 139/174 -
dimanche, 6. janvier 2019 (5:16 )
J.D.B. DIASOLUKA Nz. Luyalu
JavaScript Tome-XXII
Tester si une chaîne est plus « lourde » qu’une deuxième :
<script type="text/javascript">
var str1 = "ddd";
"use strict";
var str2 = "aaaa"
console.log(str1.localeCompare(str2));
// 1
var str3 = "dd";
console.log(str1.localeCompare(str3));
// 1
var str4 = "ddd";
console.log(str1.localeCompare(str4));
// 0
var str5 = "dddd";
console.log(str1.localeCompare(str5)); /* -1 */
</script>
Truc / Astuce pour trier une chaîne de caractères :
Différents types d’Arrays
- 140/174 -
dimanche, 6. janvier 2019 (5:16 )
J.D.B. DIASOLUKA Nz. Luyalu
JavaScript Tome-XXII
Allons-y étape par étape :
String() . split() sans arguments :
String() . split() avec argument « espace » :
String() . split() avec argument « chaîne vide » :
Différents types d’Arrays
- 141/174 -
dimanche, 6. janvier 2019 (5:16 )
J.D.B. DIASOLUKA Nz. Luyalu
Différents types d’Arrays
- 142/174 -
JavaScript Tome-XXII
dimanche, 6. janvier 2019 (5:16 )
J.D.B. DIASOLUKA Nz. Luyalu
JavaScript Tome-XXII
VIII. Coder un texte avec « btoa(chaîne binaire) » et le décoder
avec « atob(chaîne base64String) ». Cette technique permet de
transmettre sans faille (interruption intempestive) un texte qui contient des caractères spéciaux entre ASCII 0 et ASCII 31.
<script type="text/javascript"> "use strict";
let stg="Ne confondez pas « types de "+
"données (minuscules) » et "+
"« objets standard » (Capitalisés)";
// Encoder le texte
let encodedData = btoa(stg);
console.log(encodedData);
// Décoder le texte
let decodedData = atob(encodedData);
console.log(decodedData);
// Encoder texte contenant caractères spéciaux
encodedData = btoa(escape(stg));
console.log(encodedData);
// Décoder le texte
decodedData = unescape(atob(encodedData));
console.log(decodedData);
</script>
Pour rechercher une sous-chaîne dans une String on peut utiliser la méthode « indexOf » ou « lastIndexOf ».
<script type = "text/javascript">
var ss = "chasseur";
var str =
"Un chasseur sachant chasser sans son chien est un
bon chasseur";
console.log("str.indexOf(ss) =", str.indexOf(ss));
console.log("str.lastIndexOf(ss =)",
str.lastIndexOf(ss));
</script>
Différents types d’Arrays - 143/174 - dimanche, 6. janvier 2019 (5:16 )
J.D.B. DIASOLUKA Nz. Luyalu
str.indexOf(ss) = 3
str.lastIndexOf(ss) = 54
JavaScript Tome-XXII
test.html:5:4
test.html:6:4
Vérifier si une chaîne de caractères contient une sous-chaîne donnée :
includes() :
<script type="text/javascript"> "use strict";
console.log("abcde".includes("cd")) // true
console.log("abcde".includes("cd", 2)) // true
console.log("abcde".includes("CD")) // false
console.log("abcde".includes("cd", 3)) // false
console.log("abcabc".indexOf("ca")) // 2
console.log("abcde".indexOf("de")==3) // true
console.log("abcabc".indexOf("x")) // -1
console.log("abcab".indexOf("de")==3) // false
console.log("a.b.c.d".lastIndexOf(".")) // 5
console.log("abcab".lastIndexOf("ab")==3) // true
console.log("abcabc".lastIndexOf("x")) // -1
console.log("abcab".lastIndexOf("de")==-2) // false
</script>
Mais on peut aussi utiliser une expression régulière (RegExp) pour vérifier
si une chaîne contient une sous-chaîne donnée.
RegExp . match ( ) :
<script type = "text/javascript">
const rgi = /chasseur/gi;
var str =
"Un Chasseur sachant chasser sans son chien "+
"est un bon CHASSEUR mieux qu'un autre chasseur";
console.log(str.match(rgi));
Différents types d’Arrays
- 144/174 -
dimanche, 6. janvier 2019 (5:16 )
J.D.B. DIASOLUKA Nz. Luyalu
JavaScript Tome-XXII
const rgCH = /CHASSEUR/g;
var str =
"Un Chasseur sachant chasser sans son chien "+
"est un bon CHASSEUR mieux qu'un autre chasseur";
console.log(str.match(rgCH));
const rgc = /chasseur/g;
var str =
"Un Chasseur sachant chasser sans son chien "+
"est un bon CHASSEUR mieux qu'un autre chasseur";
console.log(str.match(rgc));
const rgC = /Chasseur/g;
var str =
"Un Chasseur sachant chasser sans son chien "+
"est un bon CHASSEUR mieux qu'un autre chasseur";
console.log(str.match(rgC));
const ri = /CHASSEUR/i;
var str =
"Un Chasseur sachant chasser sans son chien "+
"est un bon CHASSEUR mieux qu'un autre chasseur";
console.log(str.match(ri));
</script>
RegExp . search ( ) :
<script type = "text/javascript">
var re = /sans son chien/gi;
var str = "Un chasseur sachant chasser sans son chien est un
bon chasseur";
if ( str.search(re) == -1 ) {
console.log("«",str,"»\nne contient pas «", re,"»");
Différents types d’Arrays
- 145/174 -
dimanche, 6. janvier 2019 (5:16 )
J.D.B. DIASOLUKA Nz. Luyalu
}
JavaScript Tome-XXII
else {
console.log("«",str,"»\nContient «", re,"»");
}
</script>
Exécution :
« Un chasseur sachant chasser sans son chien est un bon
chasseur »
Contient « /sans son chien/gi »
test.html:10:7
« RegExp » est un objet. Voici la structure de la nôtre en cliquant sur l’objet
« RegExp » de l’affichage ci-dessus dans la fenêtre de la console :
« /sans son chien/gi
global: true
ignoreCase: true
lastIndex: 0
multiline: false
source: "sans son chien"
sticky: false
unicode: false
<prototype>: Object { … }
»
<prototype>: {…}
compile: function compile()
constructor: function RegExp()
"$&": "sans son chien"
"$'": " est un bon chasseur"
"$+": ""
"$1": ""
"$2": ""
"$3": ""
"$4": ""
"$5": ""
"$6": ""
"$7": ""
"$8": ""
Différents types d’Arrays - 146/174 - dimanche, 6. janvier 2019 (5:16 )
J.D.B. DIASOLUKA Nz. Luyalu
JavaScript Tome-XXII
"$9": ""
"$_": "Un chasseur sachant chasser sans son chien
est un bon chasseur"
"$`": "Un chasseur sachant chasser "
input: "Un chasseur sachant chasser sans son chien
est un bon chasseur"
lastMatch: "sans son chien"
lastParen: ""
leftContext: "Un chasseur sachant chasser "
length: 2
name: "RegExp"
prototype: Object { … }
rightContext: " est un bon chasseur"
Symbol(Symbol.species): Getter
<prototype>: function ()
apply: function apply()
arguments: null
bind: function bind()
call: function call()
caller: null
constructor: function Function()
length: 0
name: ""
toSource: function toSource()
toString: function toString()
Symbol(Symbol.hasInstance):
function Symbol.hasInstance()
<prototype>: Object { … }
exec: function exec()
flags: Getter
global: Getter
ignoreCase: Getter
multiline: Getter
source: Getter
sticky: Getter
test: function test()
toSource: function toString()
toString: function toString()
unicode: Getter
Symbol(Symbol.match): function Symbol.match()
Symbol(Symbol.replace): function Symbol.replace()
Symbol(Symbol.search): function Symbol.search()
Symbol(Symbol.split): function Symbol.split()
Différents types d’Arrays - 147/174 - dimanche, 6. janvier 2019 (5:16 )
J.D.B. DIASOLUKA Nz. Luyalu
JavaScript Tome-XXII
<prototype>: Object { … }
__defineGetter__: function __defineGetter__()
__defineSetter__: function __defineSetter__()
__lookupGetter__: function __lookupGetter__()
__lookupSetter__: function __lookupSetter__()
constructor: function Object()
assign: function assign()
create: function create()
defineProperties:
function defineProperties()
defineProperty: function defineProperty()
entries: function entries()
freeze: function freeze()
getOwnPropertyDescriptor:
function getOwnPropertyDescriptor()
getOwnPropertyDescriptors:
function getOwnPropertyDescriptors()
getOwnPropertyNames:
function getOwnPropertyNames()
getOwnPropertySymbols:
function getOwnPropertySymbols()
getPrototypeOf: function getPrototypeOf()
is: function is()
isExtensible: function isExtensible()
isFrozen: function isFrozen()
isSealed: function isSealed()
keys: function keys()
length: 1
name: "Object"
preventExtensions:
function preventExtensions()
prototype: Object { … }
seal: function seal()
setPrototypeOf: function setPrototypeOf()
values: function values()
<prototype>: function ()
hasOwnProperty: function hasOwnProperty()
isPrototypeOf: function isPrototypeOf()
propertyIsEnumerable:
function propertyIsEnumerable()
toLocaleString: function toLocaleString()
toSource: function toSource()
toString: function toString()
Différents types d’Arrays - 148/174 - dimanche, 6. janvier 2019 (5:16 )
J.D.B. DIASOLUKA Nz. Luyalu
valueOf: function valueOf()
JavaScript Tome-XXII
Voici la structure d’une « RegExp » telle que nous l’obtenons à la console
quand nous tapons ce mot à la ligne de commande. Nous y voyons toutes
les entrées que nous pouvons exploiter d’un « RegExp » :
Une méthode intéressante de « String » est le callback « replace » qui permet de remplacer les caractères dans une chaîne selon un critère spécifié.
<script> "use strict";
function convertirVoyels(s) {
return s.replace(/[aeiouy]/g, function(e) {
return e.toUpperCase();
});
}
Différents types d’Arrays
- 149/174 -
dimanche, 6. janvier 2019 (5:16 )
J.D.B. DIASOLUKA Nz. Luyalu
JavaScript Tome-XXII
function convertirConsonnes(s) {
return s.replace(/[^aeiouy]/g, function(e) {
return e.toUpperCase();
});
}
function convertirEnMaj(s) {
return s.replace(/[a-z]/g, function(e) {
return e.toUpperCase();
});
}
function convertirEnmin(s) {
return s.replace(/[A-Z]/g, function(e) {
return e.toLowerCase();
});
}
console.log(convertirVoyels(
"Lelo ya yo moko, Lobi ya bino
console.log(convertirConsonnes(
"Lelo ya yo moko, Lobi ya bino
console.log(convertirEnMaj(
"lelo ya yo moko, lobi ya bino
console.log(convertirEnmin(
"LELO YA YO MOKO, LOBI YA BINO
</script>
mibale"));
mibale"));
mibale"));
MIBALE"));
Les LITTÉRALES DE CHAÎNE :
Depuis ECMAScript 2015 (= ES6) existent les « littérales de chaîne » ou
Différents types d’Arrays
- 150/174 -
dimanche, 6. janvier 2019 (5:16 )
J.D.B. DIASOLUKA Nz. Luyalu
JavaScript Tome-XXII
« template strings » ou « template literals » ou « modèles de libellés » ou
« libellés de chaînes de caractères » ou « gabarits de chaînes de caractères ».
Ce sont des chaînes de caractères (strings) qui s’utilisent comme des
chaînes ordinaires (celles délimitées par des guillemets [doubles] ou des
apostrophes = guillemets simples), mais dans lesquelles on peut utiliser et
mélanger librement des guillemets et apostrophes, manipuler des variables,
paramètres formels, expressions et formules, appeler des fonctions,… bref
tout ce qui retourne une valeur et ce, sans opération de concaténation.
Il ne faut pas confondre les « littérales de chaîne » avec la « chaîne de
format » des langages C)
C’est un peu plus difficile à obtenir que les guillemets et apostrophes, mais
il paraît plus logique et plus intéressant de ne plus utiliser que le « ` »
comme délimiteurs des chaînes de caractères à la place des guillemets ou
apostrophes.
Pour saisir un back-tick ou backquotes (accent grave simple) comme tel
dans une littérale de chaîne, il faut le précéder d’un caractère
d’échappement « \` ».
<script> "use strict";
console.log(`Littéral \`de\` chaîne.`);
console.log(`Littéral "de" chaîne.`);
console.log(`Littéral 'de' chaîne.`);
console.log("Chaîne avec `guillemets`.");
console.log('Chaîne avec `apostrophes`');
console.log("Chaîne avec \"guillemets\".");
console.log('Chaîne avec \'postrophes\'');
</script>
Différents types d’Arrays
- 151/174 -
dimanche, 6. janvier 2019 (5:16 )
J.D.B. DIASOLUKA Nz. Luyalu
JavaScript Tome-XXII
Simple littéral de chaîne :
<script> "use strict";
console.log(`Littéral de chaîne.`);
console.log("Chaîne avec guillemets.");
console.log('Chaîne avec apostrophes');
</script>
Littéral de chaîne avec variable :
<body></body>
<script> "use strict";
let v={x:"Ixhe" , y:"Igrec"}
console.log(
`Une variable dans « ${Object.values(v)}
» une chaîne litérale`);
</script>
Différents types d’Arrays
- 152/174 -
dimanche, 6. janvier 2019 (5:16 )
J.D.B. DIASOLUKA Nz. Luyalu
JavaScript Tome-XXII
Pour éviter les mauvais renvois à la ligne il n’est pas nécessaire de
découper les « littérales de chaîne » avec un « backslash ». Le texte
à la sortie est automatiquement découpé en fonction des coupures
dans le code source, et surtout tous les espaces blancs y compris
ceux en début des lignes sont respectés, contrairement à l’HTML qui
ne retient que le premier caractère d’espacement. Pour éviter la pléthore d’espaces blancs au début d’une nouvelle ligne, commencez
cette nouvelle ligne juste à la marge gauche du code source.
<script> "use strict";
console.log(
`Une très très longue littérale de chaîne
qui doit nécessairement être découpée dans le
code source pour la rendre plus facile à lire sans
faire défiler la page avec l'ascenseur couché.`
)
</script>
Le « backslash » n’est pas un caractère spécial, n’a pas
d’interprétation spéciale et n’introduit pas une séquence
d’échappement
Différents types d’Arrays
- 153/174 -
dimanche, 6. janvier 2019 (5:16 )
J.D.B. DIASOLUKA Nz. Luyalu
JavaScript Tome-XXII
<script> "use strict";
console.log(
`Une autre longue \
littérale de chaîne.`
)
</script>
Configuration interne d’une « littérale de chaîne » :
<body></body>
<script> "use strict";
let v={x:"Ixhe" , y:"Igrec" , z:Number(10)},
lc = `${Object.values(v)}`
// Configuration interne de la littérale de chaîne "lc"
console.log(
Object.getOwnPropertyDescriptors(lc)
);
// Configuration interne de la littérale d'objet "v"
console.log(
Object.getOwnPropertyDescriptors(Object.values(v))
);
</script>
Différents types d’Arrays
- 154/174 -
dimanche, 6. janvier 2019 (5:16 )
J.D.B. DIASOLUKA Nz. Luyalu
JavaScript Tome-XXII
Même les nombres sont stockés en tant que alpha et non pas en
tant que numériques. Voyez même ci-dessous, « 10d » n’est pas en
binaire « 1010b ».
Exemple :
Écrire un code qui écrit dans l’élément <body></body> :
C’est l’occasion aussi d’illustrer une « littérale de chaîne ».
La syntaxe d’une « littérale de chaîne » est la suivante :
${nom_variable | nom_paramètre_formel | expression | fonction}.
Différents types d’Arrays
- 155/174 -
dimanche, 6. janvier 2019 (5:16 )
J.D.B. DIASOLUKA Nz. Luyalu
JavaScript Tome-XXII
`` : = paire de back-tick (accent grave simple, <ALT-7>-<Barre
d’espacement> ou ASCII 96 ou « &#96; » ou « 0x60 » ou
« &grave; » ou « CTRL-ALT-7 » avec certains logiciels) introduit la
littérale de chaîne (ou template strings).
$ : introduit une variable dans la littérale de chaîne,
{} : placeholder = espace réservé. Délimitent la chaîne à substituer
(interpolation d’expression) qui peut représenter
I. le nom d’une variable ou d’un paramètre formel.
II. une expression à évaluer.
III. un ou plusieurs appels de fonction.
Les $ et {} ne sont nécessaires que quand on doit saisir une variable,
une expression ou une formule à calculer…
Attention, le back-tick (accent grave simple) est une fonctionnalité
JavaScript non encore reconnue par HTML/DOM.
Remplacement de variables [ou de paramètre formel] :
<body></body>
<script> "use strict";
let f = (nom,matr) =>
`<div style=background:navy;color:red;font-size:16pt>
Notre DIV</div>
Bonjour, Mme/Mlle,M. « ${nom} » Matr: « ${matr} ».`;
document.body.innerHTML =f("Elaka",2018);
</script>
Différents types d’Arrays
- 156/174 -
dimanche, 6. janvier 2019 (5:16 )
J.D.B. DIASOLUKA Nz. Luyalu
JavaScript Tome-XXII
Remplacement d’expressions arithmétiques :
<script> "use strict";
const x = 3, y = 5;
console.log(
`(${x} + ${y})² = ${x*x + y*y +2*x*y}`
) // (3 + 5)² = 64
</script>
Appel de fonctions :
<script> "use strict";
const x = 3, y = 5;
console.log(
`Racine carrée de (${x} + ${y})² =`,
`${Math.sqrt(Math.pow(x,2) +
Math.pow(y,2) + 2*x*y)}`
) // Racine carré de (3 + 5)² = 8
</script>
La méthode « String . raw ( ) » :
Affiche le brut du contenu d'un « template string ».
Sans « String . raw ( ) » :
<script> "use strict";
console.log(
`Un \n caractère \t de contrôle.`
)
Différents types d’Arrays
- 157/174 -
dimanche, 6. janvier 2019 (5:16 )
J.D.B. DIASOLUKA Nz. Luyalu
JavaScript Tome-XXII
</script>
Avec « String . raw ( ) » :
<script> "use strict";
console.log(
String.raw`Un \n caractère \t de contrôle.`);
</script>
La littérale de chaîne permet d’avoir une « template » pour le traitement
d’une chaîne utilisée comme argument d’appel d’une fonction. Toute expression ou valeur « x » non contenue dans un formateur « $ { x } » est un
élément de l’array du premier paramètre dans la fonction appelée (cidessous le paramètre « stg ») dans l’ordre dans lequel ils sont rencontrés,
et tout formateur « $ { x } » est un élément de l’array du paramètre du reste
(2è paramètre) dans la fonction appelée. Donc toute chaîne avant le premier « $ { x } » a l’indice 0 dans le premier paramètre de la fonction appelée, donc chaque « $ { x } » incrémente l’indice dans la liste des éléments
de l’aray du premier paramètre dans la fonction appelée, même quand deux
« $ { x } » ne sont pas séparés d’un espace.
<script type="text/javascript"> "use strict";
function diag(stg, ...argum) {
return stg[0]+argum[0]+stg[1]+argum[1]+stg[2];
}
const stg1 = "voleur";
const stg2 = "volé";
console.log(diag`Un ${stg1} qui s'est fait ${stg2}
Différents types d’Arrays
- 158/174 -
dimanche, 6. janvier 2019 (5:16 )
J.D.B. DIASOLUKA Nz. Luyalu
pleure`);
</script>
JavaScript Tome-XXII
<script type="text/javascript"> `use strict`;
const laDate = (txt, ...rParam) => {
let data = '';
console.log("txt ",txt)
console.log("rParam =",rParam)
alert(txt + "\n" + rParam)
txt.forEach((e, i) => {
if(rParam[i]) data += e + rParam[i];
});
return data;
}
const j = 27;
const m = "novembre";
const a = 2018;
const ts = `Jour = ${j} / Mois = ${m} / Année = ${a}`;
console.log(laDate`${ts}`);
</script>
À l’exécution :
Différents types d’Arrays
- 159/174 -
dimanche, 6. janvier 2019 (5:16 )
J.D.B. DIASOLUKA Nz. Luyalu
JavaScript Tome-XXII
Notez ceci :
La fonction [fléchée] n’est pas appelée avec la liste d’arguments dans une
paire de « parenthèses », mais avec une « littérale de chaîne » qui sert de
« template ».
Voyons comment cette template est configurée et reçue par la fonction
appelée « laDate » :
Le premier paramètre (celui de gauche = « txt ») reçoit les parties de la
template dans une Array. Les parties constituantes de cette Array sont
délimitées dans la « littérale de chaîne » par les « place holders » ( $ { } )
dont les contenus sont constitués des variables « j », « m » et « a » définies
au-dessus de l’appel de la fonction. Les 4 éléments de l’Array de notre
template sont donc comme indiquée dans le message pop-up et l’affichage
dans la console :
« 0 : Jour = »,
« 1 : / Mois = » et
« 2 : / Année = » et
« Une chaîne vide » qui représentant le reste vide de la littérale de chaîne.
Quant au paramètre du reste qui dès le départ est par nature lui aussi une
Array, il reçoit ici toutes les 3 variables de la littérale de chaîne envoyée à
la fonction appelée :
« 27 »,
« novembre » et
« 2018 ».
Quant à la méthode « String . forEach » elle a été appelée avec deux paDifférents types d’Arrays
- 160/174 -
dimanche, 6. janvier 2019 (5:16 )
J.D.B. DIASOLUKA Nz. Luyalu
JavaScript Tome-XXII
ramètres, le « e » et le « i » qui sont aussi des « placeholders » :
Le paramètre « e » pour chacun des éléments de l’Array-paramètre ITÉRABLE « txt » (puisque c’est lui « txt » qui figure en préfixe de « . forEach ».
Le paramètre factice « i » qui nous servira de compteur qui parcourra automatiquement et à partir de l’indice zéro tous les éléments des deux paramètres-Arrays, comme on peut le voir ci-dessous :
<script type="text/javascript">
let arr = [47, 95, 19];
'use strict';
arr.forEach((x, y) => {
console.log(x,y);
}
);
</script>
La fonction fléchée anonyme est un callBack qui sera donc automatiquement appelée pour chacun des éléments de l’Array « i » (qui est égale à
« txt »), dans leur ordre d’apparition.
Tant qu’il y a encore un élément dans l’array « rParam » (c’est-à-dire Tant
que l’élément « rParam[i] » ne sera pas null ou undefined ou en simple
tant que « rParam [ i ] » s’assimilera à « true », la chaîne de caractère « data » sera ici concaténée par une autre concaténation celle de l’élément
correspondant « txt [ i ] » représentée schématiquement par la variable
factice « e », avec l’élément « rParam [ i ] ». L’ensemble de la chaîne « data »
sera retournée par la fonction « laDate ».
Attention ne confondez pas ici « date » avec « e » et « data » avec « a »
sans lien spécifique entre les deux.
Différents types d’Arrays
- 161/174 -
dimanche, 6. janvier 2019 (5:16 )
J.D.B. DIASOLUKA Nz. Luyalu
JavaScript Tome-XXII
Ce qu’il faut retenir ici c’est que :
1.
Les templates littérales de chaîne sont envoyées en paramètres
dans des back-ticks ou backquotes (accents graves simples) à la place des
parenthèses,
2.
Les variables sont enfermées dans des « $ { } »,
3.
Les variables sont reçues par le paramètre du reste qui est une
Array,
4.
Les textes de la template sont reçus par le premier paramètre (celui
de gauche) sous forme aussi d’Array.
Une application pratique du template de littérale de chaîne :
<script> "use strict"; const cl=console.log;
const d=new Date();
let prepend = (p1,p2) => {
const len=p1.length+p2.length;
return p2.padStart(len,p1[0]);
};
let postpend = (p1,...p2) => {
const len=p1[1].length+p2[0].length;
return p2[0].padEnd(len,p1[1]);
};
let pend = (p1,...p2) => {
const len1=p2[0].length+p2[1].length,
len2=len1+p1[2].length;
return p2[1].padStart(len1,p2[0]).padEnd(len2,p1[2]);
};
const w="www.diasoluka.luy";
const re=prepend`http://${w}`;
Différents types d’Arrays
- 162/174 -
dimanche, 6. janvier 2019 (5:16 )
J.D.B. DIASOLUKA Nz. Luyalu
cl(re);
JavaScript Tome-XXII
const p="http://";
const ro=postpend`${p}www.diasoluka.luy`;
cl(ro);
const h="http://",u="www.diasoluka";
const rp=pend`${h}${u}.luy`;
cl(rp);
cl(`Durée = ${(new Date()-d)/1000} secs.`);
</script>
Une façon classique de le faire :
<script> "use strict"; const cl=console.log;
const d=new Date();
let prepend = (p1,p2) => {
const len=p1.length+p2.length;
return p1.padStart(len,p2);
};
let postpend = (p1,p2) => {
const len=p1.length+p2.length;
return p1.padEnd(len,p2);
};
let pend = (p1,p2,p3) => {
const len1=p1.length+p2.length,
len2=len1+p3.length;
return p1.padStart(len1,p2).padEnd(len2,p3);
};
Différents types d’Arrays
- 163/174 -
dimanche, 6. janvier 2019 (5:16 )
J.D.B. DIASOLUKA Nz. Luyalu
JavaScript Tome-XXII
const re=prepend("/www.diasoluka.luy",`http:/`);
cl(re);
const ro=postpend(`http://`,`www.diasoluka.luy`);
cl(ro);
const rp=pend('www.diasoluka',"http://",`.luy`);
cl(rp);
cl(`Durée = ${(new Date()-d)/1000} secs.`);
</script>
De façon plus conventionnelle encore :
<script> "use strict"; const cl=console.log;
const d=new Date();
let prepend = (p1,p2) => {
return p2+p1;
};
let postpend = (p1,p2) => {
return p1.concat(p2);
};
let pend = (p1,p2,p3) => {
return (p2+p1).concat(p3);
};
const re=prepend("/www.diasoluka.luy",`http:/`);
cl(re);
const ro=postpend(`http://`,`www.diasoluka.luy`);
cl(ro);
Différents types d’Arrays
- 164/174 -
dimanche, 6. janvier 2019 (5:16 )
J.D.B. DIASOLUKA Nz. Luyalu
JavaScript Tome-XXII
const rp=pend('www.diasoluka',"http://",`.luy`);
cl(rp);
cl(`Durée = ${(new Date()-d)/1000} secs.`);
</script>
Différents types d’Arrays
- 165/174 -
dimanche, 6. janvier 2019 (5:16 )
J.D.B. DIASOLUKA Nz. Luyalu
JavaScript Tome-XXII
L’OBJECT :
En fait qu’est ce qui est l’autre ? Est-ce l’objet qui est une Array, ou une
Array qui est un objet ? L’Array est un objet certes, mais la structure interne de l’objet est celle d’une Array.
<script type="text/javascript"> "use strict";
let a = [];
let o = new Object();
a[0]="Dummy",a[1]="Fail",a[2]="Tercio";
o[0]="Dummy",o[1]="Fail",o[2]="Tercio";
console.log(a,o);
</script>
Ce sont leurs propriétés propres, prototypes [et ceux de leurs constructeurs] ainsi que leurs modes d’accès, de gestion qui les différencient. Mais
les deux sont construits selon les mêmes bases, la même structure interne,
comme du reste tous les autres objets (y compris les fonctions) en JavaScript.
Par exemple, l’Array diffère de l’objet entre autres par le fait qu’elle comporte une propriété « length ».
<script type="text/javascript"> "use strict";
let a = [];
Différents types d’Arrays
- 166/174 -
dimanche, 6. janvier 2019 (5:16 )
J.D.B. DIASOLUKA Nz. Luyalu
JavaScript Tome-XXII
let o = new Object();
a[0]="Dummy",a[1]="Fail",a[2]="Tercio";
o[0]="Dummy",o[1]="Fail",o[2]="Tercio";
console.log(Object.getOwnPropertyDescriptors(a));
console.log(Object.getOwnPropertyDescriptors(o));
</script>
Notez ci-dessus que les labels dans l’objet ont été baptisés automatiquement et en numérique ordonné, comme dans une simple Array, et que
l’Array aussi a dans sa représentation interne des labels [numériques] ordonnés.
Voyez ceci :
<script type="text/javascript"> "use strict";
let a = [];
let o = new Object();
a[0]="Dummy",a[1]="Fail",a[2]="Tercio";
Différents types d’Arrays
- 167/174 -
dimanche, 6. janvier 2019 (5:16 )
J.D.B. DIASOLUKA Nz. Luyalu
JavaScript Tome-XXII
o[0]="Dummy",o[1]="Fail",o[2]="Tercio";
console.log(Object.entries(a));
console.log(Object.entries(o));
</script>
Ci-dessus, la méthode « Object . entries » retourne le nombre d’éléments
contenus dans l’Array et l’objet, et ils valent tous 3.
Conversion facile d’un « object » en « Array » :
Avec « Array . flatMap ( ) » :
<script type="text/javascript"> "use strict";
console.log(
[{a:97, b:"bimbo", c:[83, 92]}]
.flatMap(it => [it.a, it.b, it.c])
);
console.log(
[{a:97, b:"bimbo", c:[83, 92]}]
.flatMap(it =>
[it.c, Math.pow(it.a,2), (it.b).concat("***")]
Différents types d’Arrays
- 168/174 -
dimanche, 6. janvier 2019 (5:16 )
J.D.B. DIASOLUKA Nz. Luyalu
)
JavaScript Tome-XXII
);
</script>
Avec « Array . map ( ) » :
<script type="text/javascript"> "use strict";
console.log(
[{a:97, b:"bimbo", c:[83, 92]}]
.map(it => [it.a, it.b, it.c])
);
console.log(
[{a:97, b:"bimbo", c:[83, 92]}]
.map(it =>
[it.c, Math.pow(it.a,2), (it.b).concat("***")]
)
);
</script>
<script type="text/javascript"> "use strict";
console.log(
Différents types d’Arrays - 169/174 - dimanche, 6. janvier 2019 (5:16 )
J.D.B. DIASOLUKA Nz. Luyalu
JavaScript Tome-XXII
Array.from(
Object.values({a:17, b:5, c:95.3, d: 475})
)
);
</script>
Différents types d’Arrays
- 170/174 -
dimanche, 6. janvier 2019 (5:16 )
J.D.B. DIASOLUKA Nz. Luyalu
JavaScript Tome-XXII
Mots-clés :
Arrays typées, ArrayBuffer, Set, String, Typed Array, Array Typée, Uint8Array,
Uint16Array, Uint32Array, Int8Array, Int16Array, Int32Array, Float32Array,
Float64Array, Arrays, Array, slice, subarray, constructeur, initialiseur, Object
literal, littéral d’objet, entries, values, paradigme
DIASOLUKA Nz. Luyalu
Docteur en Médecine, Chirurgie & Accouchements (1977),
CNOM : 0866 - Spécialiste en ophtalmologie (1980)
Études humanités : Scientifique - Mathématiques & Physique.
Informaticien-amateur, Programmeur et WebMaster.
Chercheur indépendant, autonome et autofinancé, bénévole,
sans aucun conflit d’intérêt ou liens d'intérêts ou
contrainte promotionnelle avec qui qu’il soit ou
quelqu’organisme ou institution / organisation que ce
soit, étatique, paraétatique ou privé, industriel ou
commercial en relation avec le sujet présenté.
+243 - 851278216 - 899508675 - 991239212 - 902263541 - 813572818
[email protected]
Autre Lecture :
https://www.scribd.com/document/374738470/Le-Plus-Grand-Secret-de-LaCreation
Différents types d’Arrays
- 171/174 -
dimanche, 6. janvier 2019 (5:16 )
J.D.B. DIASOLUKA Nz. Luyalu
JavaScript Tome-XXII
D’autres publications pouvant aussi intéresser :
• https://www.scribd.com/document/377036251/LeDosage-Des-Medicaments-en-Cac-Cas
• https://www.scribd.com/document/377035454/LeHasard-Des-Thermometres-Non-contact-a-Infrarouge
• https://www.scribd.com/document/376222482/PetiteIntroduction-Aux-Fonctions-JavaScript
• https://www.scribd.com/document/376221919/La-Foien-Jesus-Christ-Pour-Quoi-Faire
• https://www.scribd.com/document/375689778/Lacuitevisuelle-angulaire
• https://www.scribd.com/document/375349851/Lavariable-This
•
https://www.scribd.com/document/375024162/FonctionsImbriquees-en-JS
• https://www.scribd.com/document/374789297/FormatInterne-Des-Objets-JavaScript
•
https://www.scribd.com/document/374788758/Iterationsen-JavaScript
• https://www.scribd.com/document/374738470/Le-PlusGrand-Secret-de-La-Creation
• https://www.scribd.com/document/374597969/NouvelleFormule-d-IMC-indice-de-doduite-Selon-Dr-Diasoluka
• https://www.scribd.com/document/373847209/PropertyDescriptors
• https://www.scribd.com/document/373833282/l-ObjetDifférents types d’Arrays
- 172/174 -
dimanche, 6. janvier 2019 (5:16 )
J.D.B. DIASOLUKA Nz. Luyalu
JavaScript Tome-XXII
Global-Window
•
https://www.scribd.com/document/372665249/JavascriptTome-II
• https://www.scribd.com/document/355291488/motiliteoculaire-2
• https://www.scribd.com/document/355291239/motiliteoculaire-I
• https://www.scribd.com/document/355290248/Script-dAnalyses-Des-Reflexes-Pupillomoteurs
•
https://www.scribd.com/document/321168468/Renseigne
ments-Id-et-Anthropometriques
•
https://www.scribd.com/document/320856721/Emission31-Jul-2016
•
https://www.scribd.com/document/318182982/Complicati
on-Visuelle-du-Traitement-de-La-Malaria
• https://www.scribd.com/document/318180637/RapportEntre-Oxymetrie-Et-Type-Respiration
•
https://www.scribd.com/document/315746265/Classificati
on-Des-Medicaments
•
https://www.scribd.com/document/315745909/Incongruen
ces-Heresies-et-Heterodoxies-de-la-Notion-deLaboratoire
• https://www.scribd.com/document/315745725/RapportDifférents types d’Arrays
- 173/174 -
dimanche, 6. janvier 2019 (5:16 )
J.D.B. DIASOLUKA Nz. Luyalu
JavaScript Tome-XXII
Entre-Oxymetrie-Et-Type-Respiration
Différents types d’Arrays
- 174/174 -
dimanche, 6. janvier 2019 (5:16 )