Till now, weâve learned about the following complex data structures:
- Objects are used for storing keyed collections.
- Arrays are used for storing ordered collections.
ÙÙÙÙ ÙÙ Ø§ÙØÙØ§Ø© اÙÙØ§ÙØ¹ÙØ©Ø ÙØ°Ø§ ÙØ§ ÙÙÙÙ. ÙÙÙØ°Ø§ ØªÙØ¯ÙÙ
Ù٠اÙÙØºØ© ÙÙØ¹ÙÙ٠آخرÙÙ: Ø§ÙØ®Ø§Ø±Ø·Ø© Map ÙØ§ÙØ·ÙÙ
Set.
Ø§ÙØ®Ø§Ø±Ø·Ø© Map
ØªÙØ¹Ø¯Ù Ø§ÙØ®Ø§Ø±Ø·Ø© تجÙ
ÙØ¹Ø© ذات Ù
ÙØ§ØªÙØ Ù
Ù Ø¹ÙØ§ØµØ± Ø§ÙØ¨ÙØ§ÙØ§ØªØ تÙ
اÙ
ÙØ§ Ù
ث٠اÙÙØ§Ø¦Ùات ObjectØ Ù
ع ÙØ±Ù Ø¨Ø³ÙØ·Ø Ù٠أÙÙ Ø§ÙØ®Ø§Ø±Ø·Ø© Map ØªØªÙØ استعÙ
ا٠اÙÙ
ÙØ§ØªÙØ Ù
ÙÙ
ÙØ§ ÙØ§Ù ÙÙØ¹Ùا.
ÙØ°Ù ØªÙØ§Ø¨ÙØ¹ÙØ§ ÙØ®Ø§ØµÙØ§ØªÙØ§:
new Map()ââ ÙÙÙØ´Ùئ خارطة.map.set(key, value)ââ ÙØ¶Ø¨Ø· اÙÙÙÙ Ø© ØØ³Ø¨ Ù ÙØªØ§ØÙا.map.get(key)ââ ÙØ¬Ùب اÙÙÙÙ Ø© ØØ³Ø¨ Ù ÙØªØ§ØÙØ§Ø ÙundefinedÙÙ ÙÙ ÙÙØ¬Ø¯keyÙÙ Ø§ÙØ®Ø§Ø±Ø·Ø©.map.has(key)ââ ÙÙØ¹ÙدtrueÙÙ ÙØ§ÙkeyÙ ÙØ¬ÙØ¯ÙØ§Ø ÙØ¥Ùا ÙÙÙfalse.map.delete(key)ââ ÙÙØ²Ù٠اÙÙÙÙ Ø© ØØ³Ø¨ Ù ÙØªØ§ØÙا.map.clear()ââ ÙÙØ²ÙÙ ÙÙ Ø´ÙØ¡ Ù Ù Ø§ÙØ®Ø§Ø±Ø·Ø©.map.sizeâ ÙÙØ¹Ùد عدد Ø§ÙØ¹Ùاصر Ø§ÙØØ§ÙÙ.
Ø¥ÙÙ٠اÙÙ Ø«Ø§Ù Ø§ÙØ¢ØªÙ:
let map = new Map();
map.set('1', 'str1'); // اÙÙ
ÙØªØ§Ø Ø³ÙØ³ÙØ© ÙØµÙØ©
map.set(1, 'num1'); // اÙÙ
ÙØªØ§Ø عدد
map.set(true, 'bool1'); // اÙÙ
ÙØªØ§Ø ÙÙÙ
Ø© Ù
ÙØ·ÙÙØ©
// Ø£ØªØ°ÙØ± ÙÙ٠أÙ٠اÙÙØ§Ø¦Ù Ø§ÙØ¹Ø§Ø¯Ù ÙÙØÙÙ٠اÙÙ
ÙØ§ØªÙØ ÙØ£Ù Ø³ÙØ§Ø³Ù ÙØµÙØ©Ø
// â«Ø§Ùخارطة ÙÙØ§ ØªØØªØ±Ù
اÙÙÙØ¹Ø ÙÙØ°Ø§Ù Ø§ÙØ³Ø·Ø±Ø§Ù Ù
ختÙÙØ§Ù:
alert( map.get(1) ); // 'num1'
alert( map.get('1') ); // 'str1'
alert( map.size ); // 3
As we can see, unlike objects, keys are not converted to strings. Any type of key is possible.
map[key]isnât the right way to use aMapSo we should use map methods: set, get and so on.
ÙÙ ÙÙ Ø£Ù ØªØ³ØªØ¹Ù Ù Ø§ÙØ®Ø§Ø±Ø·Ø© اÙÙØ§Ø¦Ùات٠ÙÙØ³Ùا Ù ÙØ§ØªÙØ.
٠ثاÙ:
let john = { name: "John" };
// ÙÙØ®Ø²Ù٠عدد Ø²ÙØ§Ø±Ø§Øª Ù٠زائر ÙÙØ§
let visitsCountMap = new Map();
// â«Ùائ٠john ÙÙ Ù
ÙØªØ§Ø Ø§ÙØ®Ø§Ø±Ø·Ø©
visitsCountMap.set(john, 123);
alert( visitsCountMap.get(john) ); // 123
Using objects as keys is one of the most notable and important Map features. The same does not count for Object. String as a key in Object is fine, but we canât use another Object as a key in Object.
let john = { name: "John" };
let ben = { name: "Ben" };
let visitsCountObj = {}; // ÙØØ§Ù٠استعÙ
Ø§Ù ÙØ§Ø¦Ù
visitsCountObj[ben] = 234; // try to use ben object as the key
visitsCountObj[john] = 123; // try to use john object as the key, ben object will get replaced
_!_
// That's what got written!
alert( visitsCountObj["[object Object]"] ); // 123
_/!_
اÙÙ
تغÙÙØ± visitsCountObj Ù
Ù ÙÙØ¹ âÙØ§Ø¦ÙâØ ÙÙÙØ°Ø§ ÙØÙÙÙ ÙÙ٠اÙÙ
ÙØ§ØªÙØ (Ù
ث٠john) Ø¥ÙÙ Ø³ÙØ§Ø³Ù ÙØµÙØ©. ÙØ¨Ùذا ÙØ¯ÙÙ
ÙÙØ§ اÙÙ
ÙØªØ§Ø Ø¨Ø§ÙØ³ÙØ³ÙØ© اÙÙØµÙØ© "[object Object]". ÙÙØ³ Ù
ا ÙØ±Ùد ÙØ·Ø¹Ùا.
As visitsCountObj is an object, it converts all Object keys, such as john and ben above, to same string "[object Object]". Definitely not what we want.
تستعÙ
Ù Map Ø§ÙØ®ÙارزÙ
ÙØ© SameValueZero ÙØªØ®ØªØ¨Ø± تساÙ٠اÙÙ
ÙØªØ§Ø Ù
ع Ø§ÙØ¢Ø®Ø±. ØªØªØ´Ø§Ø¨Ù ÙØ°Ù Ø§ÙØ®ÙارزÙ
ÙØ© ØªÙØ±ÙØ¨ÙØ§ Ù
ع اÙÙ
Ø³Ø§ÙØ§Ø© Ø§ÙØµØ§Ø±Ù
Ø© === Ø¨ÙØ§Ø±Ù Ø£ÙÙ NaN تساÙÙ NaN ÙÙ ÙØ¸Ø±Ùا. ÙØ¹Ù٠ذÙ٠بأÙÙ ØªØ³ØªØ·ÙØ¹ استعÙ
ا٠NaN ÙÙ
ÙØªØ§Ø ÙÙ Ø§ÙØ¢Ø®Ø±.
ÙØ§ ÙÙ Ù٠تغÙÙØ± ÙØ°Ù Ø§ÙØ®ÙØ§Ø±Ø²Ù ÙØ© ÙÙØ§ ØªØ®ØµÙØµÙا.
سÙÙØ³ÙØ© Ø§ÙØ§Ø³ØªØ¯Ø¹Ø§Ø¡Ø§Øª
ÙÙÙÙ
ا ÙØ§Ø¯ÙÙØ§ map.set أعاد ÙÙØ§ Ø§ÙØªØ§Ø¨Ùع Ø§ÙØ®Ø§Ø±Ø·Ø© ÙÙØ³ÙØ§Ø ÙØ¨Ùذا ÙÙ
ÙÙ Ø£Ù ÙØ³ØªØ¯Ø¹Ù Ø§ÙØªØ§Ø¨Ø¹ عÙÙ ÙØ§ØªØ¬ Ø§ÙØ§Ø³ØªØ¯Ø¹Ø§Ø¡ Ø§ÙØ³Ø§Ø¨Ù:
map.set('1', 'str1')
.set(1, 'num1')
.set(true, 'bool1');
اÙÙ Ø±ÙØ± عÙ٠خارطة
ÙÙØ§Ù Ø«ÙØ§Ø« طرائ٠ÙÙÙ
Ø±ÙØ± عÙÙ Ø¹ÙØ§ØµØ± Map ÙØªØ·Ø¨Ù٠عÙ
ÙÙØ© عÙÙÙØ§:
map.keys()ââ ÙÙØ¹Ùد Ù ÙØªØ¹Ø¯ÙÙØ¯Ùا ÙÙÙ ÙØ§ØªÙØØmap.values()ââ ÙÙØ¹Ùد Ù ÙØªØ¹Ø¯ÙÙØ¯Ùا ÙÙÙÙÙ Ømap.entries()ââ ÙÙØ¹Ùد Ù ÙØªØ¹Ø¯ÙÙØ¯Ùا ÙÙÙ Ø¯Ø®ÙØ§Øª[key, value]Ø ÙÙÙ Ø§ÙØªÙ تستع٠ÙÙØ§for..of٠بدئÙÙØ§.
٠ثاÙ:
let recipeMap = new Map([
['cucumber', 500],
['tomatoes', 350],
['onion', 50]
]);
// ÙÙ
ر٠عÙ٠اÙÙ
ÙØ§ØªÙØ (Ø§ÙØ®Ø¶Ø±Ø§Ùات)â
for (let vegetable of recipeMap.keys()) {
alert(vegetable); // cucumber, tomatoes, onion
}
// ÙÙ
ر٠عÙÙ ÙÙÙ
اÙÙ
ÙØ§ØªÙØ (عدد Ø§ÙØ®Ø¶Ø±Ø§Ùات)â
for (let amount of recipeMap.values()) {
alert(amount); // 500, 350, 50
}
// â«ÙÙ
ر٠عÙÙ Ù
Ø¯Ø®ÙØ§Øª [key, value]
for (let entry of recipeMap) { // â«Ù
ث٠recipeMap.entries()â
alert(entry); // â«cucumber,500 (ÙÙÙØ°Ø§)
}
ØªØ±ØªÙØ¨ Ø§ÙØ¥Ø¯Ø®Ø§Ù Ù٠اÙÙ
ستعÙ
Ù
ÙØ³Ùر Ø§ÙØªØ¹Ø¯Ø§Ø¯ بÙÙØ³ Ø§ÙØªØ±ØªÙب Ø§ÙØ°Ù Ø£ÙØ¯Ø®Ùت ب٠اÙÙØ§Ø¦ÙØ§ØªØ ÙØ§Ùخارطة تØÙظ ÙØ°Ø§ Ø§ÙØªØ±ØªÙب عÙÙ Ø§ÙØ¹Ùس Ù
٠اÙÙØ§Ø¦Ùات Object.
Ø¹ÙØ§Ùة٠عÙ٠ذÙÙØ ÙØªÙ
ÙÙ Ø§ÙØ®Ø§Ø±Ø·Ø© Map Ø§ÙØªØ§Ø¨Ùع اÙÙ
ضÙ
ÙÙ ÙÙÙØ§ forEachØ ÙÙ
ا اÙÙ
صÙÙÙØ§Øª Array:
// â«ØªÙÙÙÙØ° Ø§ÙØ¯Ø§ÙØ© عÙÙ ÙÙÙ Ø²ÙØ¬ (key, value)
recipeMap.forEach( (value, key, map) => {
alert(`${key}: ${value}`); // â«cucumber: 500 Ø¥ÙØ® Ø¥ÙØ®
});
Object.entries: ØµÙØ¹ خارطة Ù Ù ÙØ§Ø¦Ù
Ù
ت٠Ù
ا Ø£ÙÙØ´Ø£Øª خارطة Map ÙØ³ØªØ·Ùع تÙ
Ø±ÙØ± Ù
صÙÙÙØ© (Ø£Ù Ù
ÙØªØ¹Ø¯ÙÙØ¯Ùا Ø¢Ø®Ø±ÙØ§) ÙÙØ§ Ø£Ø²ÙØ§Ø¬ âÙ
ÙØ§ØªÙØ/ÙÙÙ
â ÙØªÙÙØ¦ØªÙØ§Ø ÙÙØ°Ø§ تÙ
اÙ
ÙØ§:
// â«Ù
صÙÙÙØ© Ù
Ù Ø£Ø²ÙØ§Ø¬ [key, value]
let map = new Map([
['1', 'str1'],
[1, 'num1'],
[true, 'bool1']
]);
alert( map.get('1') ); // str1
ÙÙ ÙØ§Ù Ø£Ù
اÙ
ÙØ§ ÙØ§Ø¦ÙÙØ§ عادÙÙØ§ ÙÙØ±Ùد ØµÙØ§Ø¹Ø© Map Ù
ÙÙØ ÙÙÙ
ÙÙÙØ§ استعÙ
Ø§Ù Ø§ÙØªØ§Ø¨Ùع اÙÙ
ضÙ
ÙÙ Ù٠اÙÙØºØ© Object.entries(obj) إذ ÙÙØ¹Ùد Ù
صÙÙÙØ© Ù
ÙÙÙÙØ© Ù
Ù Ø£Ø²ÙØ§Ø¬ âÙ
ÙØ§ØªÙØ/ÙÙÙ
â ÙÙÙØ§Ø¦ÙØ Ø¨ÙÙØ³ Ø§ÙØµÙغة Ø§ÙØªÙ ÙØ·ÙØ¨ÙØ§ Ø°Ø§Ù Ø§ÙØªØ§Ø¨Ùع.
ÙÙÙØ°Ø§ ÙÙ ÙÙ Ø£Ù ÙØµÙع خارطة Ù Ù ÙØ§Ø¦Ù Ø¨ÙØ°Ù Ø§ÙØ·Ø±ÙÙØ©:
let obj = {
name: "John",
age: 30
};
let map = new Map(Object.entries(obj));
alert( map.get('name') ); // John
ÙØ±Ù ÙÙØ§ Ø§ÙØªØ§Ø¨Ùع Object.entries ÙÙØ¹Ùد Ù
صÙÙÙØ© Ø¨Ø£Ø²ÙØ§Ø¬ âÙ
ÙØ§ØªÙØ/ÙÙÙ
â: [ ["name","John"], ["age", 30] ]Ø ÙÙØ°Ø§ Ù
ا ØªØØªØ§Ø¬Ù Ø§ÙØ®Ø§Ø±Ø·Ø©.
Object.fromEntries: ØµÙØ¹ ÙØ§Ø¦Ù ٠٠خارطة
رأÙÙØ§ ÙÙÙ ÙØµÙع خارطة Map Ù
Ù ÙØ§Ø¦Ù٠عادÙ٠باستعÙ
ا٠Object.entries(obj)â. عÙÙ Ø§ÙØ¹Ùس Ù
ÙÙ ÙØ§Ùتابع Object.fromEntries ÙØ£Ø®Ø° خارطة ÙÙÙØ§ Ø£Ø²ÙØ§Ø¬ [key, value] ÙÙØµÙع ÙØ§Ø¦ÙÙØ§ Ù
ÙÙØ§:
let prices = Object.fromEntries([
['banana', 1],
['orange', 2],
['meat', 4]
]);
// now prices = { banana: 1, orange: 2, meat: 4 }
alert(prices.orange); // 2
ÙÙ
ÙÙÙØ§ استعÙ
ا٠Object.fromEntries ÙÙØµÙع ÙØ§Ø¦ÙÙØ§ عادÙÙØ§ Ù
Ù Map. ÙÙÙÙØ¯Ùا ÙØ°Ø§ Ù
Ø«ÙÙØ§ Ù٠تخزÙÙ Ø§ÙØ¨ÙØ§ÙØ§Øª ÙÙ Ø®Ø§Ø±Ø·Ø©Ø Ø¨ÙÙÙ
ا ÙØ±Ùد تÙ
Ø±ÙØ±Ùا Ø¥ÙÙ Ø´ÙÙØ±Ø© Ù
Ù Ø·Ø±Ù Ø«Ø§ÙØ«Ø© ØªØ±ÙØ¯ ÙØ§Ø¦ÙÙØ§ عادÙÙØ§ ÙØ§ خارطة.
ÙØ°Ù Ø§ÙØ´ÙÙØ±Ø© اÙÙ ÙØ´Ùدة:
let map = new Map();
map.set('banana', 1);
map.set('orange', 2);
map.set('meat', 4);
let obj = Object.fromEntries(map.entries()); // Ùâ«ØµÙع ÙØ§Ø¦ÙÙØ§ عادÙÙØ§ (\*)
//Ùâ«ÙÙØ°Ø§ Ø§ÙØªÙÙÙØ§!
// obj = { banana: 1, orange: 2, meat: 4 }
alert(obj.orange); // 2
Ù
ت٠Ù
ا استدعÙÙØ§ map.entries()â Ø£Ø¹Ø§Ø¯Øª Ù
صÙÙÙØ© Ù
ؤÙÙÙØ© Ù
Ù Ø£Ø²ÙØ§Ø¬ âÙ
ÙØ§ØªÙØ/ÙÙÙ
â Ø¨ÙÙØ³ Ø§ÙØªÙسÙÙ Ø§ÙØ°Ù ÙØ·Ùب٠Object.fromEntries تÙ
اÙ
ÙØ§Ø ÙØØ³Ù Ø§ÙØØ¸.
ÙÙ
ÙÙÙØ§ ØªÙØµÙر Ø§ÙØ³Ø·Ø± اÙÙ
عÙÙÙ
(*) ذاÙ:
let obj = Object.fromEntries(map); // Ø¨â«Ø¯ÙÙ â.entries()â
اÙÙØªÙجة ÙÙØ³Ùا إذ Ø£ÙÙ Ø§ÙØªØ§Ø¨Ùع Object.fromEntries ÙØªÙÙÙØ¹ ÙØ§Ø¦ÙÙØ§ Ù
ÙØªØ¹Ø¯ÙÙØ¯Ùا ÙØ³ÙØ·ÙØ§ ÙÙØ ÙÙÙØ³ Ù
صÙÙÙØ© Ø¨Ø§ÙØ¶Ø±Ùرة. ÙÙ
ا ÙØ§Ùتعداد اÙÙÙØ§Ø³Ù ÙÙØ®Ø§Ø±Ø·Ø© ÙØªÙÙÙØ¹ ذات Ø£Ø²ÙØ§Ø¬ âÙ
ÙØ§ØªÙØ/ÙÙÙ
â Ø§ÙØªÙ ÙØªÙÙÙØ¹Ùا map.entries()âØ ÙÙÙØ°Ø§ ÙØ¬Ø¯ ÙÙ ÙØ¯Ùا ÙØ§Ø¦ÙÙØ§ عادÙÙØ§ ÙÙ ÙÙØ³ âÙ
ÙØ§ØªÙØ/ÙÙÙ
â Ø§Ùخارطة map.
Ø§ÙØ·ÙÙ
Set
Ø§ÙØ£Ø·ÙÙ
(Set) ÙÙ ÙÙØ¹ خاص٠Ù
Ù Ø§ÙØªØ¬Ù
ÙØ¹Ø§Øª ÙÙØ³ ÙÙ Ù
ÙØ§ØªÙØ ÙÙØ§ ÙÙ
ÙÙ Ø£Ù ÙØÙÙ Ø£ÙØ«Ø± Ù
Ù ÙÙÙ
Ø© Ù
ØªØ·Ø§Ø¨ÙØ©. ÙÙ
Ù٠عدÙÙØ§ ÙØ£Ø·ÙÙ
اÙÙ
جÙÙØ±Ø§Øª ÙØ§ÙØ£Ø³ÙØ§ÙØ ØÙØ« ÙØ§ ØªØªÙØ±Ùر Ø£Ù ÙØ·Ø¹Ø© Ù
رتÙÙ.
Ø¥ÙÙÙ ØªÙØ§Ø¨ÙØ¹Ù Ø§ÙØ±Ø¦Ùسة:
new Set(iterable)ââ ÙØµÙع Ø§ÙØ·ÙÙ . ÙÙ ØØ§Ù Ù Ø±ÙØ±Øª ÙØ§Ø¦Ùiterable(ÙÙ٠عادة٠٠صÙÙÙØ©)Ø ÙÙÙØ³Ø® Ø¨ÙØ§Ùات٠إÙÙ Ø§ÙØ·ÙÙ .set.add(value)ââ ÙÙØ¶ÙÙ ÙÙÙ Ø© Ø¥ÙÙ Ø§ÙØ·ÙÙ ÙÙÙØ¹Ùد٠ذاتÙ.set.delete(value)ââ ÙÙØ²Ù٠اÙÙÙÙ Ø© ÙÙÙØ¹ÙدtrueÙÙ ÙØ§Ùت اÙÙÙÙ Ø©valueÙ ÙØ¬Ùدة Ø¹ÙØ¯ استدعاء Ø§ÙØªØ§Ø¨ÙØ¹Ø ÙØ¥ÙÙØ§ ÙÙØ¹Ùدfalse.set.has(value)ââ ÙÙØ¹ÙدtrueÙÙ ÙØ§Ùت اÙÙÙÙ Ø© Ù ÙØ¬Ùدة ÙÙ Ø§ÙØ·ÙÙ Ø ÙØ¥ÙÙØ§ ÙÙØ¹Ùدfalse.set.clear()ââ ÙÙØ²ÙÙ ÙÙÙ Ø´ÙØ¡ Ù Ù Ø§ÙØ·ÙÙ .set.sizeâ Ø®Ø§ØµÙØ© عدد Ø§ÙØ¹Ùاصر ÙÙ Ø§ÙØ·ÙÙ .
اÙÙ
ÙØ²Ø© Ø§ÙØ£ÙÙ
Ù ÙÙØ£Ø·ÙÙ
Ù٠أÙÙÙ ÙÙ Ø§Ø³ØªØ¯Ø¹ÙØª set.add(value)â Ø£Ùثر Ù
Ù Ù
Ø±ÙØ© ÙØ¨ÙÙØ³ اÙÙÙÙ
Ø©Ø ÙÙØ£ÙÙÙ Ø§Ø³ØªØ¯Ø¹ÙØªÙÙ Ù
Ø±ÙØ© ÙØ§ØØ¯Ø©. ÙÙØ°Ø§ ØªØ¸ÙØ± ÙÙ ÙÙÙ
Ø© ÙÙ Ø§ÙØ·ÙÙ
Ù
Ø±ÙØ© ÙØ§ØØ¯Ø© ÙØ§ ØºÙØ±.
Ø¹ÙØ¯Ù Ù Ø«ÙÙØ§ Ø£Ù٠زÙÙØ§Ø±Ùا ÙØ§Ø¯Ù Ù٠إÙÙ ÙÙÙÙ Ø© ÙÙØ±Ùد تذÙÙØ± ÙÙÙ ÙØ§ØØ¯ ÙØ¥Ø¹Ø¯Ø§Ø¯ ٠ا ÙÙÙ٠٠٠طعا٠⦠ÙÙÙÙ ÙØ¬Ø¨ Ø£ÙÙØ§ ÙØ³Ø¬ÙÙ Ø§ÙØ²ÙÙØ§Ø± ٠رتÙÙØ ÙØ§Ùزائر âÙØ§ØØ¯â ÙÙØ¹Ø¯ÙÙ Ù Ø±ÙØ© ÙØ§ØØ¯Ø© ÙÙØ·.
Ø§ÙØ·ÙÙ ÙÙØ§ ÙÙ Ø§ÙØ®Ùار Ø§ÙØ£Ù Ø«Ù:
let set = new Set();
let john = { name: "John" };
let pete = { name: "Pete" };
let mary = { name: "Mary" };
// Ø²Ø§Ø±ÙØ§ اÙÙØ§Ø³Ø ÙÙÙØ§Ù Ù
Ù Ø²Ø§Ø±ÙØ§ Ø£ÙØ«Ø± Ù
Ù Ù
رة
set.add(john);
set.add(pete);
set.add(mary);
set.add(john);
set.add(mary);
// ÙØ§ ÙØÙØ¸ Ø§ÙØ·ÙÙ
Ø¥ÙØ§ اÙÙÙÙ
اÙÙØ±Ùدة
alert( set.size ); // 3
for (let user of set) {
alert(user.name); // â«John (Ø«Ù
Ù Pete ÙMary)
}
ÙÙ
ÙÙ Ø¹ÙØ¶ Ø§ÙØ£Ø·ÙÙ
استعÙ
ا٠Ù
صÙÙÙØ© Ù
٠اÙÙ
ستخدÙ
ÙÙØ Ù
ع ÙØµÙ ÙØªØÙÙÙ Ù
Ù Ø§ÙØ¨ÙØ§ÙØ§Øª Ø¹ÙØ¯ إدخاÙÙØ§ ÙØ£ÙÙØ§ ØªØØ¯Ø« ØªÙØ±Ø§Ø±Ø§Øª (باستعÙ
ا٠arr.find). ÙØ°Ø§ Ù
Ù
ÙÙ ÙØ¹Ù
Ø ÙÙÙ Ø§ÙØ£Ø¯Ø§Ø¡ سÙÙÙÙ Ø£Ø´ÙØ¹ Ø¨ÙØ«Ùر ÙØªØ§Ø¨Ùع Ø§ÙØ¨ØØ« arr.find ÙÙ
ر٠عÙÙ ÙØ§Ù
٠اÙÙ
صÙÙÙØ© ÙÙÙØØµ ÙÙÙ Ø¹ÙØµØ± ÙÙÙØ§. Ø§ÙØ·ÙÙ
Set Ø£ÙØ¶Ù بÙ
راØÙ ÙØ£Ø¯Ø§Ø¤Ù ÙÙ ÙØØµ ØªÙØ±Ùد Ø§ÙØ¹Ùاصر Ù
ÙØØ³ÙÙ٠داخ٠بÙÙØ© اÙÙØºØ©.
اÙÙ Ø±ÙØ± عÙÙ Ø·ÙÙ
ÙÙ
ÙÙ ÙÙØ§ اÙÙ
Ø±ÙØ± عÙÙ Ø¹ÙØ§ØµØ± Ø§ÙØ·ÙÙ
باستعÙ
ا٠ØÙÙØ© for..of Ø£Ù ØªØ§Ø¨ÙØ¹ forEach:
let set = new Set(["oranges", "apples", "bananas"]);
for (let value of set) alert(value);
// â«ÙÙØ³ Ø§ÙØ£Ù
ر Ù
ع forEach:
set.forEach((value, valueAgain, set) => {
alert(value);
});
ÙÙÙÙ ÙØ§ØØ¸ ÙÙØ§ Ø·Ø±Ø§ÙØ© Ø§ÙØªØ§Ø¨Ùع: ÙØ¯Ø§ÙØ© رد٠اÙÙØ¯Ø§Ø¡ اÙÙ
ÙÙ
Ø±ÙØ±Ø© Ø¥ÙÙ forEach Ø«ÙØ§Ø« ÙÙØ³Ø·Ø§Ø¡: ÙÙÙ
Ø© valueØ ÙØ°Ø§Øª اÙÙÙÙ
Ø© Ø§ÙØ£ÙÙÙ valueAgainØ ÙØ§ÙÙØ§Ø¦Ù اÙÙØ¯Ù. ÙØ§ØØ¸ØªÙ ÙÙÙ ØªÙØ±Ùرت ذات اÙÙÙÙ
Ø© Ù٠اÙÙÙØ³Ø·Ø§Ø¡ Ù
Ø±ÙØªÙÙØ
ÙØ¹Ø²Ù ÙØ°Ø§ Ø¥ÙÙ ØªÙØ§ÙÙ Set Ù
ع Map إذ ÙØ¯Ø§ÙØ© Ø±Ø¯Ù Ø§ÙØªØ§Ø¨Ø¹ اÙÙ
ÙÙ
Ø±ÙØ±Ø© Ø¥ÙÙ forEach Ø§ÙØ®Ø§Ø±Ø·Ø© Ø«ÙØ§Ø« ÙÙØ³Ø·Ø§Ø¡ Ø£ÙØ¶Ùا. Ù
ع٠ØÙØ Ø£Ù
Ø±ÙØ§ ØºØ±ÙØ¨Ø ÙÙÙÙÙÙØ§ تÙÙØ¯ ÙØªÙسÙÙÙ ØÙØ§ØªÙØ§ ÙÙ Ø£Ø±Ø¯ÙØ§ Ø§Ø³ØªØ¨Ø¯Ø§Ù Ø§ÙØ®Ø§Ø±Ø·Ø© Ø¨Ø§ÙØ·ÙÙ
ÙÙ ØØ§Ùات ØØ±Ø¬Ø©Ø ÙÙ
ا Ø§ÙØ¹Ùس Ø£ÙØ¶Ùا.
Ù٠ا ØªØ¯Ø¹Ù Ø§ÙØ£Ø·ÙÙ ÙÙØ³ Ø§ÙØªÙØ§Ø¨ÙØ¹ Ø§ÙØªÙ ØªØ¯Ø¹Ù ÙØ§ Ø§ÙØ®Ø§Ø±Ø·Ø© ÙÙØªØ¹Ø§Ù ٠٠ع اÙÙ ÙØªØ¹Ø¯ÙÙØ¯Ø§Øª:
set.keys()ââ ÙÙØ¹Ùد ÙØ§Ø¦ÙÙØ§ Ù ÙØªØ¹Ø¯ÙÙØ¯Ùا ٠٠اÙÙÙÙ Øset.values()ââ ØªÙ Ø§Ù ÙØ§ Ù Ø«Ùset.keys()â(Ù ÙØ¬Ùد ÙÙØªÙاÙ٠٠عMap)Øset.entries()ââ ÙÙØ¹Ùد ÙØ§Ø¦ÙÙØ§ Ù ÙØªØ¹Ø¯ÙÙØ¯Ùا ٠٠اÙÙ ÙØ¯Ø®Ùات[value, value](Ù ÙØ¬Ùد ÙÙØªÙاÙ٠٠عMap).
Ù ÙØ®Øµ
Ø§ÙØ®Ø§Ø±Ø·Ø© Map Ù٠تجÙ
ÙØ¹Ø© ذات Ù
ÙØ§ØªÙØ.
ØªÙØ§Ø¨Ø¹Ùا ÙØ®Ø§ØµÙØ§ØªÙØ§:
new Map([iterable])ââ ÙØµÙع Ø®Ø±ÙØ·Ø© ÙÙØ¶Ø¹ ÙÙÙØ§ Ø£Ø²ÙØ§Ø¬[key,value]داخ٠اÙÙ ÙØªØ¹Ø¯ÙÙØ¯iteratableØ§ÙØ§Ø®ØªÙار٠(ÙÙ Ù٠أ٠ÙÙÙÙ Ù Ø«ÙÙØ§ ٠صÙÙÙØ©).map.set(key, value)ââ ÙØ®Ø²Ù٠اÙÙÙÙ Ø© ØØ³Ø¨ Ù ÙØªØ§ØÙا.map.get(key)ââ ÙÙØ¹Ùد اÙÙÙÙ Ø© ØØ³Ø¨ Ù ÙØªØ§ØÙØ§Ø ÙÙÙØ¹ÙدundefinedÙÙ ÙÙ ÙÙ٠اÙÙ ÙØªØ§ØkeyÙÙ Ø§ÙØ®Ø§Ø±Ø·Ø©.map.has(key)ââ ÙÙØ¹ÙدtrueÙÙ ÙØ§Ù اÙÙ ÙØªØ§ØkeyÙ ÙØ¬ÙØ¯ÙØ§Ø ÙØ¥Ùا ÙÙØ¹Ùدfalse.map.delete(key)ââ ÙÙØ²Ù٠اÙÙÙÙ Ø© ØØ³Ø¨ Ù ÙØªØ§ØÙا.map.clear()ââ ÙÙØ²ÙÙ Ù٠٠ا ÙÙ Ø§ÙØ®Ø§Ø±Ø·Ø©.map.sizeâ ÙÙØ¹Ùد عدد Ø§ÙØ¹Ùاصر ÙÙ Ø§ÙØ®Ø§Ø±Ø·Ø© Ø§ÙØ¢Ù.
Ø§Ø®ØªÙØ§ÙØ§ØªÙØ§ Ù
ع اÙÙØ§Ø¦Ùات Ø§ÙØ¹Ø§Ø¯ÙØ© (Object):
- تدع٠أÙÙØ§Ø¹ اÙÙ ÙØ§ØªÙØ Ø§Ù٠ختÙÙØ©Ø Ù٠ا ÙØ§ÙÙØ§Ø¦Ùات ÙÙØ³Ùا Ø£ÙØ¶Ùا.
- ÙÙÙØ§ ØªÙØ§Ø¨Ùع أخر٠تÙÙØ¯ÙØ§Ø ÙÙ
ا ÙØ®Ø§ØµÙØ©
size.
Ø§ÙØ·ÙÙ
Set Ù٠تجÙ
ÙØ¹Ø© Ù
٠اÙÙÙÙ
اÙÙØ±Ùدة.
ØªÙØ§Ø¨Ø¹Ù ÙØ®Ø§ØµÙاتÙ:
new Set([iterable])ââ ÙØµÙع Ø·ÙÙ ÙØ§ ÙÙØ¶Ø¹ ÙÙÙ Ø£Ø²ÙØ§Ø¬[key, value]داخ٠اÙÙ ÙØªØ¹Ø¯ÙÙØ¯ Ø§ÙØ§Ø®ØªÙار٠(ÙÙ Ù٠أ٠ÙÙÙÙ Ù Ø«ÙÙØ§ ٠صÙÙÙØ©).set.add(value)ââ ÙÙØ¶Ù٠اÙÙÙÙ Ø©value(ÙÙÙ ÙØ§Ùت Ù ÙØ¬Ùدة ÙØ§ ÙÙØ¹Ù Ø´ÙØ¡) ث٠٠ÙÙØ¹Ùد Ø§ÙØ·ÙÙ ÙÙØ³Ù.set.delete(value)ââ ÙÙØ²Ù٠اÙÙÙÙ Ø© ÙÙÙØ¹ÙدtrueÙÙ ÙØ§Ùت Ù ÙØ¬Ùدة Ø¹ÙØ¯ استدعاء Ø§ÙØªØ§Ø¨ÙØ¹Ø ÙØ¥Ùا ÙÙØ¹Ùدfalse.set.has(value)ââ ÙÙØ¹ÙدtrueÙÙ ÙØ§Ùت اÙÙÙÙ Ø© ÙÙ Ø§ÙØ·ÙÙ Ø ÙØ¥Ùا ÙÙØ¹Ùدfalse.set.clear()ââ ÙÙØ²ÙÙ Ù٠٠ا ÙÙ Ø§ÙØ·ÙÙ .set.sizeâ Ø¹Ø¯Ø¯ Ø¹ÙØ§ØµØ± Ø§ÙØ·ÙÙ .
ÙØ³Ø±Ù ØªØ±ØªÙØ¨ اÙÙ
Ø±ÙØ± عÙÙ Ø¹ÙØ§ØµØ± Map ÙSet Ø¨ØªØ±ØªÙØ¨ إدخاÙÙØ§ ÙÙÙÙ
ا دÙÙ
ÙØ§Ø ÙÙÙØ°Ø§ ÙØ§ ÙÙ
Ù٠أ٠ÙÙÙ٠بأÙÙÙØ§ تجÙ
ÙØ¹Ø§Øª ØºÙØ± Ù
Ø±ØªÙØ¨Ø©Ø ب٠أÙÙØ§ ÙØ§ ÙÙØ¯Ø± عÙ٠إعادة ØªØ±ØªÙØ¨ Ø¹ÙØ§ØµØ±Ùا Ø£Ù Ø§ÙØØµÙ٠عÙÙÙØ§ بÙÙØ±Ø³Ùا ÙÙÙØ§.
ت٠ارÙÙ
ØªØ±Ø´ÙØ Ø§ÙØ¹Ùاصر اÙÙØ±Ùدة Ù٠٠صÙÙÙØ©
Ø§ÙØ£ÙÙ ÙØ©: 5
Ø¹ÙØ¯Ù Ø£ÙÙ arr Ù
صÙÙÙØ©. Ø£ÙØ´Ùئ Ø¯Ø§ÙØ© unique(arr)â ØªÙØ¹ÙØ¯ Ù
صÙÙÙØ© Ù
ؤÙÙÙØ© Ù
Ù Ø§ÙØ¹Ùاصر اÙÙØ±Ùدة ÙÙ arr.
٠ثاÙ:
function unique(arr) {
/_ ÙÙØ§ ØªÙØªØ¨ Ø´ÙÙØ±ØªÙ_/
}
let values = ["Hare", "Krishna", "Hare", "Krishna",
"Krishna", "Krishna", "Hare", "Hare", ":-O"
];
alert( unique(values) ); // Hare, Krishna, :-O
ÙØ§ØØ¸ Ø£ÙÙ Ø§ÙØ³Ùاس٠اÙÙØµÙØ© Ø§Ø³ØªÙØ¹Ù ÙØª ÙÙØ§Ø ÙÙÙÙ ÙÙ Ù٠أ٠تÙÙ٠اÙÙÙ٠بأÙÙ ÙÙØ¹ آخر.
ØºÙØ´Ù Ù
Ù ÙØ°Ù: استعÙ
Ù Set ÙØªØ®Ø²Ù٠اÙÙÙÙ
اÙÙØ±Ùدة.
Ø§ÙØÙ
function unique(arr) {
return Array.from(new Set(arr));
}
ØªØ±Ø´ÙØ Ø§ÙØ£ÙÙØ§Ø¸ اÙÙ ÙÙÙØ¨Ø©
Ø§ÙØ£ÙÙ ÙØ©: 4
ØªÙØ³Ù Ù٠اÙÙÙ٠ات Ø§ÙØªÙ ÙÙØ§ ذات Ø§ÙØ£ØØ±Ù ÙÙÙÙ Ø¨ØªØ±ØªÙØ¨ ٠ختÙ٠أÙÙØ§Ø¸Ùا Ù ÙÙÙØ¨Ø©Ø Ù Ø«Ù ÙØ°Ù:
nap - pan
ear - are - era
cheaters - hectares - teachers
Ø£Ù Ø§ÙØ¹Ø±Ø¨ÙØ©:
Ù
ÙÙ - ÙÙ
Ù
Ù
سÙÙÙ - سÙÙÙ
Ù
ÙØ§ØªØ¨ - Ø§ÙØªØ¨ - ÙØªØ§Ø¨
Ø§ÙØªØ¨ Ø¯Ø§ÙØ© aclean(arr)â ØªÙØ¹ÙØ¯ Ù
صÙÙÙØ©Ù بدÙÙ ÙØ°Ù Ø§ÙØ£ÙÙØ§Ø¸ اÙÙ
ÙÙÙØ¨Ø©. ÙÙØ°Ø§:
let arr = ["nap", "teachers", "cheaters", "PAN", "ear", "era", "hectares"];
alert( aclean(arr) ); // "nap,teachers,ear" أ٠"PAN,cheaters,era"
ÙØ¬Ø¨ Ø£Ù ÙÙÙÙ ÙØ§ØªØ¬ ÙÙÙ Ù Ø¬Ù ÙØ¹Ø© Ø£ÙÙØ§Ø¸ ÙÙÙ Ø© ÙØ§ØØ¯Ø© ÙÙØ·Ø ÙÙØ§ ÙÙÙ ÙÙØ§ Ø£ÙÙ ÙØ§ØØ¯Ø©.
Ø§ÙØÙ
ÙÙ Ø£Ø±Ø¯ÙØ§ Ø§ÙØ¨ØØ« ع٠ÙÙ Ø§ÙØ£ÙÙØ§Ø¸ اÙÙ ÙÙÙØ¨Ø©Ø سÙÙØ³Ù ÙÙÙ ÙÙÙ Ø© Ø¥ÙÙ ØØ±ÙÙÙØ§ ÙÙØ±ØªÙØ¨ÙØ§. ٠ت٠٠ا Ø±ØªÙØ¨ÙØ§ÙØ§ ØØ³Ø¨ Ø§ÙØ£ØØ±ÙØ ÙØ³ØªÙÙÙ Ø§ÙØ£ÙÙØ§Ø¸ ÙÙÙØ§ Ù ØªØ·Ø§Ø¨ÙØ©. ÙÙØ°Ø§:
nap, pan -> anp
ear, era, are -> aer
cheaters, hectares, teachers -> aceehrst
...
Ø³ÙØ³ØªØ¹Ù Ù ÙÙÙ ÙÙÙ Ø© ٠ختÙÙØ© (ÙÙÙÙ Ù ØªØ·Ø§Ø¨ÙØ© Ø¨ØªØ±ØªÙØ¨ Ø£ØØ±ÙÙØ§) ÙØªÙÙÙ Ù ÙØ§ØªÙØ Ø®Ø±ÙØ·Ø© ÙÙØ®Ø²ÙÙ ÙÙØ¸Ùا ÙØ§ØØ¯Ùا ÙÙÙ Ù ÙØªØ§Ø ÙÙØ·:
function aclean(arr) {
let map = new Map();
for (let word of arr) {
// ÙÙØ³Ù
اÙÙÙÙ
Ø© Ø¨Ø£ØØ±ÙÙØ§Ø ÙÙØ±Ùتب Ø§ÙØ£ØØ±Ù ÙÙØ¬Ù
Ø¹ÙØ§ ثاÙÙØ©Ù
let sorted = word.toLowerCase().split('').sort().join(''); // (*)
map.set(sorted, word);
}
return Array.from(map.values());
}
let arr = ["nap", "teachers", "cheaters", "PAN", "ear", "era", "hectares"];
alert( aclean(arr) );
ÙÙÙÙÙØ° Ø§ÙØªØ±ØªÙب ØØ³Ø¨ Ø§ÙØ£ØØ±Ù Ø¨Ø³ÙØ³ÙØ© استدعاءات ÙÙ
ا ÙÙ Ø§ÙØ³Ø·Ø± (*). سÙÙØ³Ù
ÙØ§ عÙÙ Ø£ÙØ«Ø± Ù
٠سطر ÙÙØ³ÙÙ ÙÙÙ
ÙØ§:
let sorted = arr[i] // PAN
.toLowerCase() // pan
.split('') // ['p','a','n']
.sort() // ['a','n','p']
.join(''); // anp
ÙÙØ°Ø§ ÙÙÙÙ ÙØ¯Ù اÙÙÙÙ
تÙ٠اÙÙ
ختÙÙØªÙÙ 'PAN' Ù'nap' ذات Ø§ÙØ´ÙÙ ØÙÙ ØªÙØ±ØªÙب Ø£ØØ±ÙÙØ§: 'anp'.
ÙÙ Ø§ÙØ³Ø·Ø± اÙÙØ§ØÙ ÙÙØ¶Ù٠اÙÙÙÙ Ø© Ø¥ÙÙ Ø§ÙØ®Ø§Ø±Ø·Ø©.
map.set(sorted, word);
new Map([iterable])â creates the map, with optionaliterable(e.g. array) of[key,value]pairs for initialization.map.set(key, value)â stores the value by the key, returns the map itself.map.get(key)â returns the value by the key,undefinedifkeydoesnât exist in map.map.has(key)â returnstrueif thekeyexists,falseotherwise.map.delete(key)â removes the value by the key, returnstrueifkeyexisted at the moment of the call, otherwisefalse.map.clear()â removes everything from the map.map.sizeâ returns the current element count.
ÙÙ٠اÙÙÙØ§ÙØ© ÙØ£Ø®Ø° Array.from(map.values())â Ù
ØªÙØ¹Ø¯ÙÙØ¯Ø§ ÙÙ
ر٠عÙÙ ÙÙÙ
Ø§ÙØ®Ø§Ø±Ø·Ø© (ÙØ§ ÙØ±Ùد Ù
ÙØ§ØªÙØÙا ÙÙ ÙØ§ØªØ¬ Ø§ÙØ¯Ø§ÙØ©) ÙÙÙØ¹Ùد اÙÙ
صÙÙÙØ© ÙÙØ³Ùا.
ÙÙ ÙÙÙØ§ (ÙÙ ÙØ°Ù اÙÙ Ø³Ø£ÙØ©) Ø§Ø³ØªØ¹Ù Ø§Ù ÙØ§Ø¦Ù Ø¹Ø§Ø¯Ù Ø¨Ø¯Ù Ø§ÙØ®Ø§Ø±Ø·Ø©Ø إذ Ø£Ù٠اÙÙ ÙØ§ØªÙØ Ø³ÙØ§Ø³Ù ÙØµÙØ©. ÙÙØ°Ø§ Ø³ÙØ¨Ø¯Ù Ø§ÙØÙÙ ÙÙ Ø§ØªØ¨Ø¹ÙØ§ ÙØ°Ø§ اÙÙÙØ¬:
function aclean(arr) {
let obj = {};
for (let i = 0; i < arr.length; i++) {
let sorted = arr[i].toLowerCase().split("").sort().join("");
obj[sorted] = arr[i];
}
return Object.values(obj);
}
let arr = ["nap", "teachers", "cheaters", "PAN", "ear", "era", "hectares"];
alert( aclean(arr) );
Ù ÙØ§ØªÙØ Ù ÙÙØ±ÙÙØ±Ø©
Ø§ÙØ£ÙÙ ÙØ©: 5
ÙØ±Ùد تسجÙ٠اÙÙ
صÙÙÙØ© اÙÙØ§ØªØ¬Ø© Ù
Ù map.keys()â ÙÙ Ù
تغÙÙØ± ÙØ«Ù
٠استدعاء ØªÙØ§Ø¨Ùع تخص٠اÙÙ
صÙÙÙØ§Øª عÙÙÙØ§ Ù
ث٠â.push. ÙÙÙÙ٠ذÙÙ ÙÙ
ÙÙÙØ¹:
let map = new Map();
map.set("name", "John");
let keys = map.keys();
// â«Ø®Ø·Ø£: keys.push ÙÙØ³Øª Ø¯Ø§ÙØ©
keys.push("more");
ÙÙ
Ø§Ø°Ø§Ø ÙÙÙÙ ÙÙ
ÙÙÙØ§ Ø¥ØµÙØ§Ø Ø§ÙØ´ÙÙØ±Ø© ÙÙØ¹Ù
Ù keys.pushØ
Ø§ÙØÙ
ÙØ£ÙÙ Ø§ÙØªØ§Ø¨Ùع map.keys()â ÙÙØ¹Ùد Ù
ÙØªØ¹Ø¯ÙÙØ¯Ùا ÙØ§ Ù
صÙÙÙØ©. ÙÙ
ÙÙÙØ§ تØÙÙÙ٠إÙÙ Ù
صÙÙÙØ© باستعÙ
ا٠Array.from:
let map = new Map();
map.set("name", "John");
let keys = Array.from(map.keys());
keys.push("more");
alert(keys); // name, more
ترج٠ة -ÙØ¨ØªØµØ±Ù- ÙÙÙØµÙ Map and Set Ù Ù ÙØªØ§Ø¨ The JavaScript language
Ø§ÙØªØ¹ÙÙÙØ§Øª
<code>Ø ÙÙÙÙØ«Ùر Ù Ù Ø§ÙØ³Ø·Ùر استخدÙ<pre>Ø ÙÙØ£Ùثر Ù Ù 10 Ø³Ø·ÙØ± استخد٠(plnkr, JSBin, codepenâ¦)