ØªÙØ¯Ù٠اÙ٠صÙÙÙØ§Øª ØªÙØ§Ø¨Ùع Ø¹Ø¯ÙØ¯Ø© ØªÙØ³ÙÙÙÙ Ø§ÙØªØ¹Ø§Ù Ù Ù Ø¹ÙØ§. ÙÙØªØ¨Ø³ÙØ·ÙØ§ سÙÙØ³ÙÙ ÙØ§ Ø¥ÙÙ Ù Ø¬Ù ÙØ¹Ø§Øª Ø¨ØØ³Ø¨ اÙÙØ¸ÙÙØ© ÙÙ ÙØ°Ø§ اÙÙØµÙ ÙÙØ´Ø±Ø ÙÙ Ù ÙÙØ§ عÙÙ ØØ¯Ø©.
Ø¥Ø¶Ø§ÙØ© Ø§ÙØ¹Ùاصر ÙØ¥Ø²Ø§ÙØªÙØ§
عرÙÙØ§ ٠٠اÙÙØµÙ اÙÙ Ø§Ø¶Ù Ø¨Ø§ÙØªÙØ§Ø¨ÙØ¹ Ø§ÙØªÙ ØªÙØ¶ÙÙ Ø§ÙØ¹Ùاصر ÙØªÙزÙÙÙØ§ Ù Ù Ø¨Ø¯Ø§ÙØ© Ø£Ù ÙÙØ§ÙØ© اÙ٠صÙÙÙØ©:
arr.push(...items)â ÙÙØ¶ÙÙ Ø§ÙØ¹Ùاصر Ø¥Ù٠اÙÙÙØ§ÙØ©Øarr.pop()â ÙØ³ØªØ®Ø±Ø¬ Ø¹ÙØµØ±Ùا ٠٠اÙÙÙØ§ÙØ©Øarr.shift()ÙØ³ØªØ®Ø±Ø¬ Ø¹ÙØµØ±Ùا Ù Ù Ø§ÙØ¨Ø¯Ø§ÙØ©Øg,arr.unshift(...items)â ÙÙØ¶ÙÙ Ø§ÙØ¹Ùاصر Ø¥ÙÙ Ø§ÙØ¨Ø¯Ø§ÙØ©.
ÙÙØ°Ù Ø£Ø®Ø±Ù ØºÙØ±Ùا.
اÙÙØµÙ splice
ÙÙÙ ÙØØ°Ù Ø£ØØ¯ Ø¹ÙØ§ØµØ± اÙ٠صÙÙÙØ©Ø
اÙ٠صÙÙÙØ§Øª ÙØ§Ø¦ÙØ§ØªØ ÙÙ ÙÙÙØ§ تجربة delete ÙØ±Ø¨Ù ا ØªÙØ¬Ø:
let arr = ["I", "go", "home"];
delete arr[1]; // remove "go"
alert(arr[1]); // undefined
// now arr = ["I", , "home"];
alert(arr.length); // 3
Ø£ÙØ²ÙÙ Ø§ÙØ¹Ùصر صØÙØØ ÙÙÙÙ٠٠ا زا٠Ù٠اÙ٠صÙÙÙØ© Ø«ÙØ§Ø«Ø© Ø¹ÙØ§ØµØ±Ø Ù٠ا ÙØ±Ù ÙÙ arr.length == 3.
ÙØ°Ø§ Ø·Ø¨ÙØ¹ÙØ Ø¥Ø° ÙÙØ²ÙÙ delete obj.key اÙÙÙÙ Ø© Ø¨Ù ÙØªØ§ØÙا key⦠ÙÙØ°Ø§ ÙÙØ·. ÙÙÙØ¹ ÙÙÙØ§Ø¦Ùات ربÙÙ Ø§Ø ÙÙÙÙØ§ ÙØ±ÙØ¯ÙØ§ ÙÙ٠صÙÙÙØ§Øª Ø£Ù ØªÙØªÙÙ ÙÙ Ø§ÙØ¹Ùاصر عÙ٠اÙÙÙ ÙÙ ÙØªØ£Ø®Ø° اÙÙØ±Ø§Øº Ø§ÙØ¬Ø¯Ùد. أ٠أÙÙØ§ ÙØªÙÙØ¹ أ٠تصغر اÙ٠صÙÙÙØ© Ø§ÙØ¢Ù.
ÙÙØ°Ø§ Ø§ÙØ³Ø¨Ø¨ عÙÙÙØ§ Ø§Ø³ØªØ¹Ù Ø§Ù ØªÙØ§Ø¨Ùع Ø®Ø§ØµÙØ© ÙØ°ÙÙ.
The arr.splice method is a swiss army knife for arrays. It can do everything: insert, remove and replace elements.
ÙØ°Ù ØµÙØ§ØºØªÙ:
arr.splice(start[, deleteCount, elem1, ..., elemN])
It modifies arr starting from the index start: removes deleteCount elements and then inserts elem1, ..., elemN at their place. Returns the array of removed elements.
ÙÙÙ ÙØ°Ø§ Ø§ÙØªØ§Ø¨Ùع Ø¨Ø§ÙØ£Ù Ø«ÙØ© أبسط.
ÙÙÙØ¨Ø¯Ø£ Ø£ÙÙÙØ§ Ø¨Ø§ÙØØ°Ù:
let arr = ["I", "study", "JavaScript"];
arr.splice(1, 1); // from index 1 remove 1 element
alert( arr ); // ["I", "JavaScript"]
Ø±Ø£ÙØªØ سÙÙØ©. ÙØ¨Ø¯Ø£ Ù Ù Ø§ÙØ¹Ùصر ذ٠اÙÙÙØ±Ø³ 1 ÙÙÙØ²ÙÙ Ø¹ÙØµØ±Ùا ÙØ§ØØ¯Ùا (1).
Ø§ÙØ¢ÙØ ÙÙØ²ÙÙ Ø«ÙØ§Ø«Ø© Ø¹ÙØ§ØµØ± ÙÙØ³ØªØ¨Ø¯ÙÙØ§ Ø¨Ø¹ÙØµØ±Ù٠آخرÙÙ:
let arr = ["I", "study", "JavaScript", "right", "now"];
// أزÙÙ Ø§ÙØ«Ùاث Ø¹ÙØ§ØµØ± Ø§ÙØ£ÙÙÙ ÙØ¹ÙÙØ¶Ùا بتÙÙ Ø§ÙØ£Ø®Ø±Ù
arr.splice(0, 3, "Let's", "dance");
alert( arr ) // now ["Let's", "dance", "right", "now"]
Ø£Ù ÙØ§ ÙÙØ§ ÙÙÙÙ ÙÙØ¹Ùد splice ٠صÙÙÙØ©Ù Ø¨Ø§ÙØ¹Ùاصر اÙÙ ÙØ²Ø§ÙØ©.
let arr = ["I", "study", "JavaScript", "right", "now"];
// أزÙ٠أÙÙÙ Ø¹ÙØµØ±ÙÙ
let removed = arr.splice(0, 2);
alert( removed ); // "I", "study" <-- ÙØ§Ø¦Ù
Ø© Ø¨Ø§ÙØ¹Ùاصر اÙÙ
ÙØ²Ø§ÙØ©
ÙÙ Ù٠أ٠ÙÙØ¯Ø±Ø¬ ØªØ§Ø¨ÙØ¹ splice Ø§ÙØ¹Ùاصر دÙÙ Ø¥Ø²Ø§ÙØ© Ø£ÙÙ Ø´ÙØ¡ Ø£ÙØ¶Ùا. ÙÙÙØ ÙØ¶Ø¹ deleteCount ÙØ³Ø§ÙÙ Ø§ÙØµÙر 0:
let arr = ["I", "study", "JavaScript"];
// from index 2
// delete 0
// then insert "complex" and "language"
arr.splice(2, 0, "complex", "language");
alert(arr); // "I", "study", "complex", "language", "JavaScript"
اÙÙÙØ§Ø±Ø³ Ø§ÙØ³Ø§Ùبة Ù
Ù
ÙÙØ© Ø£ÙØ¶Ùا ÙÙ
ÙÙÙØ§ ÙÙØ§ ÙÙÙ ØªÙØ§Ø¨Ùع اÙÙ
صÙÙÙØ§Øª Ø§ÙØ£Ø®Ø±Ù استعÙ
ا٠اÙÙÙØ§Ø±Ø³ Ø§ÙØ³Ø§Ùبة. ÙØ¸ÙÙØªÙا ØªØØ¯Ùد اÙÙ
ÙØ§Ù Ø¨Ø¯Ø¡ÙØ§ Ù
Ù ÙÙØ§ÙØ© اÙÙ
صÙÙÙØ©Ø ÙÙØ°Ø§:
```js run
let arr = [1, 2, 5];
// from index -1 (one step from the end)
// delete 0 elements,
// then insert 3 and 4
arr.splice(-1, 0, 3, 4);
alert( arr ); // 1,2,3,4,5
```
اÙÙØ·Ø¹ slice
Ø§ÙØªØ§Ø¨Ùع arr.slice أبسط Ø¨ÙØ«Ùر ٠٠شبÙÙÙ arr.splice.
ØµÙØ§ØºØªÙ ÙÙ:
arr.slice([start], [end]);
ÙÙÙ ÙÙØ¹Ùد Ù
صÙÙÙØ© Ø¬Ø¯ÙØ¯Ø©Ù Ø¨ÙØ³Ø® Ø§ÙØ¹Ùاصر Ù
٠اÙÙÙØ±Ø³ start Ø¥ÙÙ end (Ø¨Ø§Ø³ØªØ«ÙØ§Ø¡ end). ÙÙ
Ù٠أ٠تÙÙÙ start ÙØØªÙÙ end Ø³Ø§ÙØ¨ØªØ§ÙØ Ø¨ÙØ°Ø§ ÙÙØ¹Ø¯Ù اÙÙ
ØØ±Ù٠اÙÙÙÙ
تا٠أÙ
اÙÙ Ø¨Ø¯Ø¡ÙØ§ Ù
Ù ÙÙØ§ÙØ© اÙÙ
صÙÙÙØ©.
ÙØ°Ø§ Ø§ÙØªØ§Ø¨Ùع ÙØ´Ø¨Ù ØªØ§Ø¨ÙØ¹ Ø§ÙØ³Ùاس٠اÙÙØµÙØ© str.sliceØ ÙÙÙÙ Ø¨Ø¯Ù Ø§ÙØ³Ùاس٠اÙÙØµÙØ© اÙÙØ±Ø¹ÙØ©Ø ÙÙØ¹Ùد اÙÙ
صÙÙÙØ§Øª اÙÙØ±Ø¹ÙØ©. Ø¥ÙÙ٠اÙÙ
Ø«Ø§Ù Ø§ÙØ¢ØªÙ:
For instance:
let arr = ["t", "e", "s", "t"];
alert(arr.slice(1, 3)); // (ÙØ³Ø®Ø© تبدأ Ù
Ù 1 ÙØªÙتÙÙ Ø¹ÙØ¯ 3)
alert(arr.slice(-2)); // â«(ÙØ³Ø®Ø© تبدأ Ù
Ù â-2 ÙØªÙتÙÙ Ù٠اÙÙÙØ§ÙØ©)
ÙÙ
ÙÙÙØ§ Ø£ÙØ¶Ùا Ø§Ø³ØªØ¯Ø¹Ø§Ø¦ÙØ§ Ø¨ÙØ§ ÙÙØ³Ø·Ø§Ø¡: ÙÙÙØ´Ø¦ arr.slice())â ÙØ³Ø®Ø© ع٠arr. ÙØ³ØªØ¹Ù
Ù ÙØ°Ø§ ØºØ§ÙØ¨Ùا ÙØ£Ø®Ø° ÙØ³Ø®Ø© ÙØ¥Ø¬Ø±Ø§Ø¡ تعدÙÙØ§Øª عÙÙÙØ§ دÙ٠تعدÙ٠اÙÙ
صÙÙÙØ© Ø§ÙØ£ØµÙÙØ©Ø ÙØªØ±ÙÙØ§ ÙÙ
ا ÙÙ.
Ø§ÙØ±Ø¨Ø· concat
ÙÙÙØ´Ø¦ Ø§ÙØªØ§Ø¨Ùع [arr.concat] ٠صÙÙÙØ©Ù Ø¬Ø¯ÙØ¯Ø© ÙÙÙØ§ اÙÙÙ٠اÙÙ ÙØ¬Ùدة Ù٠اÙ٠صÙÙÙØ§Øª ÙØ§ÙØ¹ÙØ§ØµØ± Ø§ÙØ£Ø®Ø±Ù.
ØµÙØ§ØºØªÙ ÙÙ:
arr.concat(arg1, arg2...)
ÙÙÙ ÙÙØ¨Ù Ø£Ù٠عدد ٠٠اÙÙÙØ³Ø·Ø§Ø¡Ø Ø£ÙØ§Ùت ٠صÙÙÙØ§Øª Ø£Ù ÙÙÙ . Ø£Ù ÙØ§ ÙØ§ØªØ¬Ù Ù٠٠صÙÙÙØ© Ø¬Ø¯ÙØ¯Ø© تØÙÙ Ø§ÙØ¹Ùاصر Ù Ù arrØ Ø«Ù arg1 ÙÙÙ arg2 ÙÙÙØ°Ø§ Ø¯ÙØ§ÙÙÙ. ÙÙ ÙØ§Ù اÙÙØ³ÙØ· argN ÙÙØ³Ù ٠صÙÙÙØ©Ø ÙØ³ØªÙÙØ³Ø® ÙÙ Ø¹ÙØ§ØµØ±ÙØ ÙØ¥ÙÙØ§ ÙØ³ÙÙÙØ³Ø® اÙÙØ³ÙØ· ÙÙØ³Ù. ÙØ§ØÙظ ÙØ°Ø§ اÙ٠ثاÙ:
let arr = [1, 2];
// â«Ø§ØµÙع Ù
صÙÙÙØ© ÙÙÙØ§ Ø§ÙØ¹ÙصرÙÙ: arr Ù [3,4]
alert(arr.concat([3, 4])); // 1,2,3,4
// â«Ø§ØµÙع Ù
صÙÙÙØ© ÙÙÙØ§ Ø§ÙØ¹Ùاصر: arr Ù[3,4] Ù[5,6]
alert(arr.concat([3, 4], [5, 6])); // 1,2,3,4,5,6
// â«Ø§ØµÙع Ù
صÙÙÙØ© ÙÙÙØ§ Ø§ÙØ¹ÙصرÙÙ: arr Ù[3,4]Ø Ø¨Ø¹Ø¯ÙØ§ أضÙ٠اÙÙÙÙ
تÙÙ 5 Ù 6
alert(arr.concat([3, 4], 5, 6)); // 1,2,3,4,5,6
Ø¹Ø§Ø¯Ø©Ù ØªÙØ³Ø® اÙ٠صÙÙÙØ© Ø¹ÙØ§ØµØ± اÙ٠صÙÙÙØ§Øª Ø§ÙØ£Ø®Ø±Ù. بÙÙ٠ا اÙÙØ§Ø¦Ùات Ø§ÙØ£Ø®Ø±Ù (ØØªÙÙ ÙÙ ÙØ§Ùت ٠ث٠اÙ٠صÙÙÙØ§Øª) ÙØ³ØªÙØ¶Ø§Ù ÙØªÙØ© ÙØ§Ù ÙØ©.
let arr = [1, 2];
let arrayLike = {
0: "something",
length: 1
};
alert(arr.concat(arrayLike)); // 1,2,[object Object]
⦠ÙÙÙÙ ÙÙ ÙØ§Ù ÙÙÙØ§Ø¦Ù Ø§ÙØ´Ø¨Ù٠باÙ٠صÙÙÙØ§Øª Ø®Ø§ØµÙØ© Symbol.isConcatSpreadableØ ÙØ³ØªØªØ¹Ø§Ù ٠٠ع٠concat Ù Ø«Ù٠ا تتعا٠٠٠ع اÙ٠صÙÙÙØ§Øª: Ø³ØªÙØ¶Ø§Ù Ø¹ÙØ§ØµØ±Ù بد٠ÙÙØ§ÙÙ:
let arr = [1, 2];
let arrayLike = {
0: "something",
1: "else",
[Symbol.isConcatSpreadable]: true,
length: 2
};
alert( arr.concat(arrayLike) ); // 1,2,something,else
Ø§ÙØªÙرار: ÙÙÙÙ forEach
ÙØªÙØ ÙÙØ§ Ø§ÙØªØ§Ø¨Ùع arr.forEach تشغÙÙ Ø¥ØØ¯Ù Ø§ÙØ¯Ùا٠عÙÙ ÙÙÙ Ø¹ÙØµØ± Ù Ù Ø¹ÙØ§ØµØ± اÙ٠صÙÙÙØ©.
Ø§ÙØµÙاغة:
arr.forEach(function(item, index, array) {
// ... استعÙ
ÙÙÙ
ا ÙÙÙ
ا ØªØ±ÙØ¯
});
٠ثا٠عÙ٠عرض ÙÙÙ Ø¹ÙØµØ± Ù Ù Ø¹ÙØ§ØµØ± اÙ٠صÙÙÙØ©:
// â«ÙÙÙÙ Ø¹ÙØµØ±Ø Ø§Ø³ØªØ¯Ø¹Ù Ø¯Ø§ÙØ© Ø§ÙØªÙبÙÙ alert
["Bilbo", "Gandalf", "Nazgul"].forEach(alert);
بÙÙ٠ا ÙØ°Ù Ø§ÙØ´ÙÙØ±Ø© ØªØØ¨Ù اÙÙÙØ§Ù Ø§ÙØ²Ø§Ø¦Ø¯ ÙÙ ÙØ§ÙÙØ§ Ù٠اÙ٠صÙÙÙØ© اÙÙ ØØ¯Ùدة:
["Bilbo", "Gandalf", "Nazgul"].forEach((item, index, array) => {
alert(`${item} is at index ${index} in ${array}`);
});
ÙØ§ØªØ¬ Ø§ÙØªØ§Ø¨Ùع (ÙÙ Ø£Ø¹Ø§Ø¯Ù Ø´ÙØ¦Ùا أصÙÙØ§) ÙÙÙÙ Ù ÙÙÙØ±Ù Ù.
Ø§ÙØ¨ØØ« Ù٠اÙ٠صÙÙÙØ§Øª
Ø£Ù ÙØ§ Ø§ÙØ¢Ù ÙÙØ±Ù Ø§ÙØªÙابع Ø§ÙØªÙ ØªØ¨ØØ« Ù٠اÙ٠صÙÙÙØ©.
Ø§ÙØªÙØ§Ø¨ÙØ¹ indexOf Ù lastIndexOf Ù includes
ÙÙØªÙØ§Ø¨ÙØ¹ arr.indexOf Ù arr.lastIndexOf Ù arr.includes ÙÙØ³ Ø§ÙØµÙاغة ÙÙØ¸ÙÙØªÙا Ù٠ذات ÙØ¸ÙÙØ© تÙÙ Ø¨ÙØ³Ø®Ø© اÙÙØµÙص اÙÙØµÙØ©Ø Ø§ÙÙØ±Ù Ø£ÙÙØ§ ÙÙØ§ تتعا٠٠٠ع Ø§ÙØ¹Ùاصر بد٠اÙÙ ØØ§Ø±Ù:
arr.indexOf(item, from)â ÙØ¨ØØ« Ø¹Ù Ø§ÙØ¹Ùصر item Ø¨Ø¯Ø¡ÙØ§ ٠٠اÙÙÙØ±Ø³ fromØ ÙÙÙØ¹Ùد ÙÙØ±Ø³Ù ØÙØ« ÙØ¬Ø¯Ù. ÙÙÙ ÙÙ ÙØ¬Ø¯ÙØ ÙÙØ¹Ùد‑1.arr.lastIndexOf(item, from)â ÙÙØ³ÙØ ÙÙÙÙ Ø§ÙØ¨ØØ« ÙØ¨Ø¯Ø£ ٠٠اÙÙÙ ÙÙ ÙÙÙØªÙÙ Ù٠اÙÙØ³Ø§Ø±â¦arr.includes(item, from)â ÙØ¨ØØ« Ø¹Ù Ø§ÙØ¹Ùصر item Ø¨Ø¯Ø¡ÙØ§ ٠٠اÙÙÙØ±Ø³ fromØ ÙÙÙØ¹Ùد true Ø¥Ù ÙØ¬Ø¯ØªÙ.
٠ثاÙ:
let arr = [1, 0, false];
alert(arr.indexOf(0)); // 1
alert(arr.indexOf(false)); // 2
alert(arr.indexOf(null)); // -1
alert(arr.includes(1)); // true
ÙØ§ØØ¸ Ø£ÙÙ Ø§ÙØªÙØ§Ø¨ÙØ¹ تستع٠٠اÙÙ ÙØ§Ø²ÙØ© بÙÙ ===. ÙØ°Ø§ ÙÙ ÙÙÙØ§ ÙØ¨ØØ« ع٠falseØ ÙØ³ØªØ¨ØØ« Ù٠ع٠false ÙÙØ³Ùا ÙÙÙØ³ Ø§ÙØµÙر.
Ù٠أردت Ù Ø¹Ø±ÙØ© ÙÙ٠ا ÙØ§Ùت ØªØØªÙ٠اÙ٠صÙÙÙØ© عÙÙ Ø¹ÙØµØ± ٠عÙÙÙØ ÙÙØ§ ØªØ±ÙØ¯ Ù Ø¹Ø±ÙØ© ÙÙØ±Ø³ÙØ ÙØ¯Ø§ÙØ© arr.includes Ù ÙØ§Ø³Ø¨Ø© ÙÙ.
ÙÙÙØ§Ù Ø£ÙØ¶Ùا Ø£Ù Ø±Ø ØªØ®ØªÙÙ includes Ø¹Ù Ø³Ø§Ø¨ÙØ§ØªÙا indexOf/lastIndexOf بأÙÙÙØ§ تتعا٠٠٠ع NaN Ù٠ا ÙÙØ¨ØºÙ:
const arr = [NaN];
alert(arr.indexOf(NaN)); // â«ÙÙØ¹Ùد â-1 (Ø§ÙØµØÙØ ÙÙ 0 Ø¥ÙÙØ§ Ø£Ù٠اÙÙ
ÙØ§Ø²ÙØ© === ÙØ§ تعÙ
Ù Ù
ع NaN)
alert(arr.includes(NaN)); // true (Ø§ÙØ¢Ù صØÙØ)
Ø§ÙØ¨ØØ« عبر find Ù findIndex
ÙÙÙ٠أÙÙ ÙØ¯ÙÙØ§ ٠صÙÙÙØ© ٠٠اÙÙØ§Ø¦ÙØ§ØªØ ÙÙÙ ÙØ¬Ø¯ اÙÙØ§Ø¦Ù ØØ³Ø¨ شرط ٠عÙÙÙØ
ÙÙØ§ ÙÙ ÙÙÙØ§ Ø§Ø³ØªØºÙØ§Ù Ø§ÙØªØ§Ø¨Ùع arr.find(fn).
ØµÙØ§ØºØªÙ ÙÙ:
let result = arr.find(function(item, index, array) {
// â«ÙÙ Ø£ÙØ¹Ùدت اÙÙÙÙ
Ø© trueØ ÙÙÙØ¹Ø§Ø¯ Ø§ÙØ¹Ùصر ÙÙØªÙÙÙÙ Ø§ÙØªØ¹Ø¯Ø§Ø¯
// â«ÙÙ ÙÙ
ÙØ¬Ø¯ Ù
ا ÙØ±Ùد ÙÙØ¹Ùد undefinedd
});
ØªÙØ³ØªØ¯Ø¹Ù Ø§ÙØ¯Ø§ÙØ© عÙÙ ÙÙ Ø¹ÙØµØ± Ù Ù Ø¹ÙØ§ØµØ± اÙ٠صÙÙÙØ©Ø ÙØ§ØØ¯Ùا بعد Ø§ÙØ¢Ø®Ø±:
item: Ø§ÙØ¹Ùصر.index: اÙÙÙØ±Ø³.array: اÙ٠صÙÙÙØ© ÙÙØ³Ùا.
Ù٠أعادت trueØ ÙØªÙÙÙÙ Ø§ÙØ¨ØØ« ÙÙÙØ¹Ø§Ø¯ Ø§ÙØ¹Ùصر item. Ø¥Ù ÙÙ ÙÙØ¬Ø¯ Ø´ÙØ¡ ÙÙÙØ¹Ø§Ø¯ undefined.
ÙØ±Ù ÙÙ ÙØ°Ø§ اÙ٠ثا٠٠صÙÙÙØ© ٠٠اÙ٠ستخد٠ÙÙØ ÙÙÙ٠٠ستخد٠ØÙÙØ§Ù id Ùname. ÙØ±Ùد Ø§ÙØ°Ù ÙØªÙاÙ٠٠ع Ø§ÙØ´Ø±Ø· id == 1:
let users = [
{ id: 1, name: "John" },
{ id: 2, name: "Pete" },
{ id: 3, name: "Mary" }
];
let user = users.find(item => item.id == 1);
alert(user.name); // John
ÙÙ Ø§ÙØÙØ§Ø© Ø§ÙØ¹Ù ÙÙØ©Ø ÙÙØ«Ùر استع٠ا٠اÙÙØ§Ø¦Ùات Ù٠اÙ٠صÙÙÙØ§ØªØ ÙÙÙØ°Ø§ ÙØ§ÙØªØ§Ø¨ÙØ¹ find Ù ÙÙØ¯ Ø¬Ø¯ÙØ§ ÙÙØ§.
ÙÙ ÙÙÙ Ù ÙØ§ØØ¸Ø© بأÙÙØ§ Ù٠اÙÙ Ø«Ø§Ù Ù Ø±ÙØ±Ùا ÙÙØªØ§Ø¨Ùع find Ø§ÙØ¯Ø§ÙØ© item => item.id == 1 ÙÙÙÙØ§ ÙØ³ÙØ· ÙØ§ØØ¯. ÙØ°Ø§ Ø·Ø¨ÙØ¹Ù ÙÙØ§Ø¯Ø±Ùا ٠ا ÙØ³ØªØ¹Ù ٠اÙÙÙØ³Ø·Ø§Ø¡ Ø§ÙØ¨ÙÙØ© ÙÙ ÙØ°Ù Ø§ÙØ¯Ø§ÙØ©
ÙØªØ´Ø§Ø¨Ù Ø§ÙØªØ§Ø¨Ùع arr.findIndex ÙØ«ÙØ±ÙØ§ ٠ع ÙØ°Ø§Ø عدا عÙ٠أÙÙÙ ÙÙØ¹Ùد ÙÙØ±Ø³ Ø§ÙØ¹Ùصر Ø§ÙØ°Ù ÙØ¬Ø¯Ù Ø¨Ø¯Ù Ø§ÙØ¹Ùصر ÙÙØ³ÙØ ÙÙÙØ¹Ùد â-1 ÙÙ ÙÙ ÙØ¬Ø¯ Ø´ÙØ¦Ùا.
Ø§ÙØªØ±Ø´ÙØ filter
ÙØ¨ØØ« Ø§ÙØªØ§Ø¨Ùع find ع٠أÙÙÙ Ø¹ÙØµØ± (ÙØ§ØØ¯ ÙÙØ·) ÙÙØÙÙÙ ÙÙØ¯Ø§ÙØ© Ø´Ø±Ø·ÙØ§ ÙØªÙØ¹ÙØ¯ true.
Ù٠أردت إعادة Ø£ÙØ«Ø± Ù Ù ÙØ§ØØ¯ ÙÙÙ Ù٠استع٠ا٠arr.filter(fn).
ØªØ´Ø¨Ù ØµÙØ§ØºØ© filter Ø§ÙØªØ§Ø¨Ùع findØ Ø§ÙÙØ±Ù Ù٠إعادت٠ÙÙ
صÙÙÙØ© بÙÙÙ Ø§ÙØ¹Ùاصر اÙÙ
ØªØ·Ø§Ø¨ÙØ©:
let results = arr.filter(function(item, index, array) {
// â«ÙÙ ÙØ§Ùت true ÙØªÙضا٠اÙÙØ§Ø¦Ù
Ø© Ø¥ÙÙ Ù
صÙÙÙØ© اÙÙØªØ§Ø¦Ø¬ ÙÙØªÙØ§ØµÙ Ø§ÙØªÙرار
// ÙÙØ¹Ùد Ù
صÙÙÙØ© ÙØ§Ø±ØºØ© Ø¥Ù ÙÙ
ÙØ¬Ø¯ Ø´ÙØ¦Ùا
});
For instance:
let users = [
{ id: 1, name: "John" },
{ id: 2, name: "Pete" },
{ id: 3, name: "Mary" }
];
// ÙÙØ¹Ùد Ù
صÙÙÙØ© ØªØØªÙ٠عÙ٠أÙÙÙ Ù
ستخدÙ
ÙÙ٠اثÙÙÙ
let someUsers = users.filter(item => item.id < 3);
alert(someUsers.length); // 2
Ø§ÙØªØ¹Ø¯Ù٠عÙÙ Ø¹ÙØ§ØµØ± اÙ٠صÙÙÙØ§Øª
ÙÙØ±Ù Ø§ÙØ¢Ù Ø§ÙØªÙØ§Ø¨ÙØ¹ Ø§ÙØªÙ ØªÙØ¹Ø¯Ù٠اÙ٠صÙÙÙØ© ÙØªÙØ¹ÙØ¯ ØªØ±ØªÙØ¨Ùا.
Ø§ÙØ®Ø§Ø±Ø·Ø© map
ÙÙØ¹Ø¯Ù Ø§ÙØªØ§Ø¨Ùع arr.map Ø£ÙØ«Ø±Ùا Ø§Ø³ØªØ®Ø¯Ø§Ù ÙØ§ ÙÙØ§Ø¦Ø¯Ø©Ù Ø£ÙØ¶Ùا. ٠ا ÙÙØ¹ÙÙ Ù٠استدعاء Ø§ÙØ¯Ø§ÙØ© عÙÙ ÙÙÙ Ø¹ÙØµØ± ٠٠اÙ٠صÙÙÙØ© ÙØ¥Ø¹Ø§Ø¯Ø© ٠صÙÙÙØ© باÙÙØªØ§Ø¦Ø¬.
ØµÙØ§ØºØªÙ ÙÙ:
let result = arr.map(function(item, index, array) {
// ÙÙØ¹Ùد اÙÙÙÙ
Ø© Ø§ÙØ¬Ø¯Ùدة Ø¹ÙØ¶ Ø§ÙØ¹Ùصر
});
Ù Ø«ÙÙØ§Ø ÙÙØ§ ÙØ¹Ø¯ÙÙ ÙÙ Ø¹ÙØµØ± ÙÙØÙÙÙ٠إÙÙ Ø·ÙÙÙ:
let lengths = ["Bilbo", "Gandalf", "Nazgul"].map(item => item.length);
alert(lengths); // 5,7,6
sort(fn)â
ÙÙØ±ØªÙب باستدعاء arr.sort()â Ø§Ù٠صÙÙÙØ© Ù٠ا Ù٠دÙÙ ÙØ³Ø®Ùا ÙÙØºÙÙØ± ØªØ±ØªÙØ¨ Ø¹ÙØ§ØµØ±Ùا. ÙÙ Ø§ÙØ£Ø®Ø±Ù ØªÙØ¹Ùد اÙ٠صÙÙÙØ© اÙÙ ÙØ±ØªÙØ¨Ø©Ø ÙÙÙÙ ØºØ§ÙØ¨Ùا ٠ا ÙÙÙ٠٠اÙÙÙÙ Ø© اÙÙ ÙØ¹Ø§Ø¯Ø© ÙØ§Ù٠صÙÙÙØ© arr ÙÙ Ø§ÙØªÙ تتغÙÙØ±.
٠ثاÙ:
let arr = [1, 2, 15];
// ÙØ¹Ùد Ø§ÙØªØ§Ø¨Ø¹ ØªØ±ØªÙØ¨ Ù
ØØªÙ٠اÙÙ
صÙÙÙØ©
arr.sort();
alert(arr); // 1, 15, 2
ÙÙ ÙØ§ØØ¸Øª بأÙ٠اÙÙØ§ØªØ¬ ØºØ±ÙØ¨Ø صار â1, 15, 2. ÙÙØ³ ÙØ°Ø§ ٠ا ÙØ±Ùد. ÙÙÙÙØ Ù٠اذاØ
٠بدئÙÙØ§Ø ØªÙØ±ØªÙب Ø§ÙØ¹Ùاصر ÙÙØ£ÙÙØ§ Ø³ÙØ§Ø³Ù ÙØµÙØ©.
باÙ٠عÙÙ Ø§ÙØØ±ÙÙ ÙÙÙÙÙ Ø©: ØªÙØÙÙÙ ÙÙ Ø§ÙØ¹Ùاصر Ø¥ÙÙ Ø³ÙØ§Ø³Ù ÙØµÙØ© Ø¹ÙØ¯ اÙÙ ÙØ§Ø²ÙØ©. ÙØ§ÙØªØ±ØªÙØ¨ اÙ٠عج٠ات٠Ù٠اÙÙ ØªÙØ¨Ø¹ ÙØªØ±ØªÙب Ø§ÙØ³Ùاس٠اÙÙØµÙØ©Ø â"2" > "15"â ØµØÙØØ© ØÙÙØ§.
عÙÙÙØ§ ÙØ§Ø³ØªØ¹Ù Ø§Ù Ø§ÙØªØ±ØªÙب Ø§ÙØ°Ù ÙØ±ÙØ¯Ù ØªÙ Ø±ÙØ±Ù Ø¯Ø§ÙØ© تÙÙÙ ÙØ³ÙØ·ÙØ§ ÙÙØªØ§Ø¨Ùع arr.sort()â.
عÙÙ Ø§ÙØ¯Ø§ÙØ© Ù ÙØ§Ø²ÙØ© ÙÙ٠تÙÙ Ø§Ø«ÙØªÙÙ (Ø£ÙÙØ§ ÙØ§Ùتا) ÙØ¥Ø¹Ø§Ø¯Ø© اÙÙØ§ØªØ¬:
function compare(a, b) {
if (a > b) return 1; // if the first value is greater than the second
if (a == b) return 0; // if values are equal
if (a < b) return -1; // if the first value is less than the second
}
Ù Ø«Ø§Ù Ø¹Ù Ø§ÙØªØ±ØªÙب ÙÙ ÙØ§Ùت اÙÙÙÙ Ø£Ø¹Ø¯Ø§Ø¯ÙØ§:
function compareNumeric(a, b) {
if (a > b) return 1;
if (a == b) return 0;
if (a < b) return -1;
}
let arr = [ 1, 2, 15 ];
arr.sort(compareNumeric);
alert(arr); // 1, 2, 15
Ø§ÙØ¢Ù صارت تع٠٠Ù٠ا ÙØ±Ùد.
ÙÙØªÙÙÙ ÙØØ¸Ø© ÙÙÙÙÙØ± ÙÙ٠ا ÙØØ¯Ø« ØªÙ Ø§Ù ÙØ§. Ø£ÙØªÙÙ٠بأÙ٠اÙ٠صÙÙÙØ© arr ÙÙ ÙÙ Ø£Ù ØªØØªÙ٠أÙÙ Ø´ÙØ¡Ø Ø£ÙÙ Ø´ÙØ¡ Ù Ù Ø§ÙØ£Ø¹Ø¯Ø§Ø¯ Ø£Ù Ø§ÙØ³Ùاس٠اÙÙØµÙØ© أ٠اÙÙØ§Ø¦Ùات Ø£Ù ØºÙØ±Ùا. ÙÙ٠٠ا ÙØ¯ÙÙØ§ ÙÙ Ù Ø¬Ù ÙØ¹Ø© Ù Ù Ø§ÙØ¹Ùاصر. ÙØªØ±ØªÙØ¨ÙØ§ ÙØØªØ§Ø¬ Ø¯Ø§ÙØ© ØªØ±ØªÙØ¨ ØªØ¹Ø±Ù Ø·Ø±ÙØ© Ù ÙØ§Ø±ÙØ© Ø¹ÙØ§ØµØ± اÙ٠صÙÙÙØ©. ٠بدئÙÙØ§Ø Ø§ÙØªØ±ØªÙب ÙÙÙÙ Ø¨Ø§ÙØ³Ùاس٠اÙÙØµÙØ©.
The arr.sort(fn) method implements a generic sorting algorithm. We donât need to care how it internally works (an optimized quicksort or Timsort most of the time). It will walk the array, compare its elements using the provided function and reorder them, all we need is to provide the fn which does the comparison.
باÙÙ ÙØ§Ø³Ø¨Ø©Ø Ù٠أردت Ù Ø¹Ø±ÙØ© Ø§ÙØ¹Ùاصر Ø§ÙØªÙ تÙÙØ§Ø²ÙÙØ§ Ø§ÙØ¯Ø§ÙØ© ØØ§ÙÙÙØ§Ø ÙÙØ§ بأس. ÙÙ ÙÙØªÙÙ Ø£ØØ¯ ÙÙ Ø¹Ø±Ø¶ØªÙØ§:
[1, -2, 15, 2, 0, 8].sort(function(a, b) {
alert( a + " <> " + b );
return a - b;
});
ÙÙ ÙÙ Ø£Ù ØªÙØ§Ø±Ù Ø§ÙØ®ÙØ§Ø±Ø²Ù ÙØ© Ø§ÙØ¹Ùصر ٠ع ØºÙØ±Ù Ù Ù Ø§ÙØ¹ÙØ§ØµØ±Ø ÙÙÙÙÙÙØ§ ØªØØ§ÙÙ ÙØ¯Ø± Ø§ÙØ¥Ù ÙØ§Ù تÙÙÙØµ عدد اÙÙ ÙØ§Ø²Ùات.
ÙÙ
ÙÙÙØ§ ÙÙØ°Ø§ ÙØªØ§Ø¨Ø© Ø§ÙØ¯Ùا٠بأسطر Ø£ÙÙ: That allows to write shorter functions:
```js run
let arr = [ 1, 2, 15 ];
arr.sort(function(a, b) { return a - b; });
alert(arr); // 1, 2, 15
```
```js
arr.sort( (a, b) => a - b );
```
ÙØ§ ØªÙØ±Ù ÙØ°Ù ع٠تÙÙ Ø§ÙØ·ÙÙÙØ© Ø¨Ø´ÙØ¡Ø Ø§ÙØ¨ØªØ©.
ØªØ°ÙØ± اÙÙ strings ÙÙ Ù ÙØ§Ø±ÙØ© Ø§ÙØ®ÙØ§Ø±Ø²Ù ÙØ§ØªØ اÙÙØ§ تÙÙØ§Ø±Ù Ø§ÙØØ±ÙØ¨ ع٠طرÙ٠اÙÙÙØ¯ Ø§ÙØ®Ø§Øµ Ø¨ÙØ§ .
باÙÙØ³Ø¨Ø© ÙÙØ¹Ø¯Ùد Ù
Ù Ø§ÙØØ±ÙÙ Ø§ÙØ£Ø¨Ø¬Ø¯ÙØ© Ø Ù
Ù Ø§ÙØ£Ùض٠استخداÙ
str.localeCompare ÙØªØ±ØªÙب Ø§ÙØØ±Ù٠بشÙ٠صØÙØ
عÙ٠سبÙ٠اÙÙ
ثا٠:
Ø¯Ø¹ÙØ§ ÙØ±ØªØ¨ اÙÙÙÙÙ Ù
Ù Ø§ÙØ¨Ùاد Ø¨Ø§ÙØ£ÙÙ
اÙÙØ©
let countries = ["Ãsterreich", "Andorra", "Vietnam"];
alert(countries.sort((a, b) => (a > b ? 1 : -1))); // Andorra, Vietnam, Ãsterreich (خطأ)
alert(countries.sort((a, b) => a.localeCompare(b))); // Andorra,Ãsterreich,Vietnam (صØÙØ!)
Ø§ÙØ¹Ùس reverse
ÙØ¹Ùس Ø§ÙØªØ§Ø¨Ùع arr.reverse ØªØ±ØªÙØ¨ Ø§ÙØ¹Ùاصر Ù٠اÙ٠صÙÙÙØ© arr.
٠ثاÙ:
let arr = [1, 2, 3, 4, 5];
arr.reverse();
alert(arr); // 5,4,3,2,1
Ù٠ا ÙÙÙØ¹Ùد اÙ٠صÙÙÙØ© arr بعد Ø¹ÙØ³Ùا.
Ø§ÙØªÙسÙÙ split ÙØ§Ùد٠ج join
Ø¥ÙÙÙ Ù ÙÙÙÙØ§ Ù Ù Ø§ÙØÙØ§Ø© Ø§ÙØ¹Ù ÙÙØ©. ØªØØ§ÙÙ Ø§ÙØ¢Ù بر٠جة تطبÙÙ Ù Ø±Ø§Ø³ÙØ©Ø ÙÙÙØ¯Ø®Ù اÙÙ Ø³ØªØ®Ø¯Ù ÙØ§Ø¦Ù Ø© اÙ٠ستÙÙ ÙÙ Ø¨ÙØ§ØµÙØ© بÙÙ ÙÙÙ ÙØ§ØØ¯: John, Pete, Mary. ÙÙÙÙ ÙÙØ§ ÙØÙ Ø§Ù٠بر٠جÙÙØ ÙØ§Ù٠صÙÙÙØ© Ø§ÙØªÙ ØªØØªÙÙ Ø§ÙØ£Ø³Ù اء أسÙÙ Ø¨ÙØ«Ùر Ù Ù Ø§ÙØ³ÙØ³ÙØ© اÙÙØµÙØ©. ÙÙÙ Ø§ÙØ³Ø¨ÙÙ Ø¥Ø°ÙØ§Ø
ÙØ°Ø§ ٠ا ÙÙØ¹ÙÙ Ø§ÙØªØ§Ø¨Ùع [str.split(delim)](mdn:js/String/splitâ. ÙØ£Ø®Ø° Ø§ÙØ³ÙØ³ÙØ© اÙÙØµÙØ© ÙÙÙØ³Ù ÙØ§ Ø¥Ù٠٠صÙÙÙØ© ØØ³Ø¨ Ù ØØ±Ù اÙÙØ§Ø³ÙÙ delim اÙÙ ÙØ¯ÙÙ .
Ù٠اÙÙ Ø«Ø§Ù Ø£Ø¹ÙØ§Ù ÙÙØ³Ù ØØ³Ø¨ Â«ÙØ§ØµÙØ© Ø¨Ø¹Ø¯ÙØ§ Ù Ø³Ø§ÙØ©Â»:
let names = "Bilbo, Gandalf, Nazgul";
let arr = names.split(", ");
for (let name of arr) {
alert(`A message to ${name}.`); // A message to Bilbo (ÙØ§ÙبÙÙØ©)
}
ÙÙØªØ§Ø¨Ùع split ÙØ³ÙØ·ÙØ§ عددÙÙØ§ Ø§Ø®ØªÙØ§Ø±ÙÙØ§ Ø£ÙØ¶ÙØ§Ø ÙÙÙ ÙØØ¯Ù Ø·Ù٠اÙ٠صÙÙÙØ©. ÙÙ ÙØ¯ÙÙ ØªÙ ÙØ³ØªÙÙÙ Ù Ø§ÙØ¹Ùاصر Ø§ÙØ£Ø®Ø±Ù. ÙÙÙÙ Ù٠اÙÙØ§Ùع Ø§ÙØ¹Ù ÙÙØ ÙØ§Ø¯Ø±Ùا ٠ا ستÙÙØ¯Ù ÙØ°Ø§:
let arr = "Bilbo, Gandalf, Nazgul, Saruman".split(", ", 2);
alert(arr); // Bilbo, Gandalf
Ø§ÙØªÙسÙ٠إÙÙ Ø£ØØ±Ù ÙÙ ÙØ§Ø¯Ùت split(s)â ÙØªØ±Ùت s ÙØ§Ø±ØºÙا ÙØ³ØªÙسÙÙ Ø§ÙØ³ÙØ³ÙØ© اÙÙØµÙØ© Ø¥Ù٠٠صÙÙÙØ© Ù Ù Ø§ÙØ£ØØ±Ù:
let str = "test";
alert(str.split("")); // t,e,s,t
اذا ÙØ§Ø¯Ùت arr.join(glue) ÙØ§ÙÙØ§ تÙÙÙ Ø¨Ø¹Ù Ù Ø¹ÙØ³Ù ÙÙ `split Ø Ø£Ù Ø£ÙÙØ§ ØªØ¹ÙØ¯ ÙØµÙ Ø¹ÙØ§ØµØ± اÙ٠صÙÙÙØ© Ù٠ا Ù٠أÙÙØ§ ØªÙØµÙÙØ§ ب٠ادة ÙØ§ØµÙØ©
٠ثا٠:
let arr = ["Bilbo", "Gandalf", "Nazgul"];
let str = arr.join(";"); // glue the array into a string using ;
alert(str); // Bilbo;Gandalf;Nazgul
Ø§ÙØªØ§Ø¨Ùعا٠reduce Ù reduceRight
٠ت٠٠ا Ø£Ø±Ø¯ÙØ§ Ø£Ù Ù٠ر٠عÙÙ Ø¹ÙØ§ØµØ± اÙ٠صÙÙÙØ©Ø استع٠ÙÙØ§ forEach Ø£Ù for Ø£Ù forâ¦of. Ù٠ت٠٠ا Ø£Ø±Ø¯ÙØ§ Ø£Ù Ù٠ر٠ÙÙÙØ¹Ùد Ø¨ÙØ§Ùات ÙÙÙ Ø¹ÙØµØ±Ø استع٠ÙÙØ§ map.
ÙÙØ³ Ø§ÙØØ§Ù Ù Ø¹ Ø§ÙØªØ§Ø¨Ø¹ÙÙ arr.reduce Ùarr.reduceRightØ Ø¥ÙÙØ§ Ø£ÙÙ٠ا ÙÙØ³Ø§ Ø¨Ø§ÙØ³ÙÙÙØ© ÙÙØ³Ùا. ÙÙØ³ØªØ¹Ù Ù ÙØ°Ø§Ù Ø§ÙØªØ§Ø¨Ø¹Ø§Ù ÙØØ³Ø§Ø¨ ÙÙÙ Ø© ÙØ§ØØ¯Ø© ØØ³Ø¨ Ø¹ÙØ§ØµØ± اÙ٠صÙÙÙØ©.
ÙØ°Ù Ø§ÙØµÙاغة:
let value = arr.reduce(
function(accumulator, item, index, array) {
// ...
},
[initial]
);
ØªÙØ·Ø¨ÙÙ Ø§ÙØ¯Ø§ÙØ© عÙÙ ÙÙ Ø¹ÙØ§ØµØ± اÙ٠صÙÙÙØ© ÙØ§ØØ¯Ùا بعد Ø§ÙØ¢Ø®Ø±Ø Ù«تÙÙÙ» اÙÙØªÙجة Ø¥Ù٠اÙÙØ¯Ø§Ø¡ Ø§ÙØªØ§ÙÙ ÙÙØ§:
ÙÙØ³Ø·Ø§Ø¡ Ø§ÙØ¯Ø§ÙØ©:
accumulatorâ ÙÙ ÙØªÙجة ÙÙÙÙ Ø§ÙØ¯ÙØ§Ù Ø§ÙØ³Ø§Ø¨ÙØ© Ù ÙØªØ¹Ø¨Ø± ٠ساÙÙØ§ ÙÙinitialÙ٠أÙ٠٠رة .itemâ Ø§ÙØ¹ÙØµØ± Ø§ÙØØ§ÙÙ Ù٠اÙ٠صÙÙÙØ©.indexâ Ù ÙØ§Ù Ø§ÙØ¹Ùصر.arrayâ Ø§Ù٠صÙÙÙØ© ÙÙØ³Ù.
ØÙÙ ØªÙØ·Ø¨ÙÙ Ø§ÙØ¯Ø§ÙØ©Ø ØªÙÙ Ø±ÙØ± Ø¥ÙÙÙØ§ ÙØªÙجة اÙÙØ¯Ø§Ø¡ Ø§ÙØ³Ø§Ø¨Ù Ù٠أÙÙÙ ÙØ³ÙØ·. Ø£Ø¬ÙØ ٠عÙÙØ¯ ÙÙÙÙÙØ§Ø ÙÙÙ ÙÙØ³ Ù٠ا تتخÙÙÙ ÙÙ ÙÙÙØ§ Ø£Ù٠اÙÙØ³ÙØ· Ø§ÙØ£Ù٠ب٠ثابة Â«Ø°Ø§ÙØ±Ø©Â» تخزÙ٠اÙÙØªÙجة اÙÙÙØ§Ø¦ÙØ© ٠٠إجراءات Ø§ÙØªÙÙÙØ° Ø§ÙØªÙ Ø³Ø¨ÙØªÙا. ÙÙ٠آخر ÙØ¯Ø§Ø¡ ØªØµÙØ± ÙØªÙجة Ø§ÙØªØ§Ø¨Ùع reduce.
ربÙ٠ا ÙÙØ¯Ù٠٠ثاÙÙØ§ ÙØªØ³ÙÙ٠اÙÙ Ø³Ø£ÙØ©. ÙÙØ§ ÙØ¹Ø±Ù Ù Ø¬Ù ÙØ¹Ø© Ø¹ÙØ§ØµØ± اÙ٠صÙÙÙØ© Ù٠سطر Ø¨Ø±Ù Ø¬Ù ÙØ§ØØ¯:
let arr = [1, 2, 3, 4, 5];
let result = arr.reduce((sum, current) => sum + current, 0);
alert(result); // 15
Ø§ÙØ¯Ø§ÙØ© اÙÙ ÙÙ Ø±ÙØ±Ø© Ø¥ÙÙ reduce ØªØ³ØªØ¹Ù Ù ÙØ³ÙØ·Ù٠اثÙÙÙ ÙÙØ·Ø ÙÙØ°Ø§ ÙØ§Ù٠عادةÙ.
ÙÙØ±Ù ØªÙØ§ØµÙ٠اÙÙØ¯Ø§Ø¡Ø§Øª.
-
Ù٠أÙÙÙ Ù Ø±ÙØ©Ø ÙÙÙ Ø© sum ÙÙ ÙÙÙ Ø© initial (آخر ÙØ³ÙØ· ÙÙ reduce) ÙØªØ³Ø§ÙÙ 0Ø Ùcurrent Ù٠أÙÙÙ Ø¹ÙØµØ± Ù٠اÙ٠صÙÙÙØ© ÙØªØ³Ø§ÙÙ 1. Ø¥Ø°ÙØ§ ÙÙØ§ØªØ¬ Ø§ÙØ¯Ø§ÙØ© ÙÙ 1.
-
Ù٠اÙÙØ¯Ø§Ø¡ Ø§ÙØªØ§ÙÙØ sum = 1 ÙÙÙØ¶ÙÙ Ø§ÙØ¹Ùصر Ø§ÙØ«Ø§ÙÙ Ù٠اÙ٠صÙÙÙØ© (2) ÙÙÙØ¹Ùد اÙÙÙÙ Ø©.
-
Ù٠اÙÙØ¯Ø§Ø¡ Ø§ÙØ«Ø§ÙØ«Ø sum = 3Ø ÙÙÙØ¶ÙÙ Ø§ÙØ¹Ùصر Ø§ÙØªØ§ÙÙ Ù٠اÙ٠صÙÙÙØ©Ø ÙÙÙØ°Ø§ Ø¯ÙØ§ÙÙ٠إÙ٠آخر ÙØ¯Ø§Ø¡â¦
ÙØ°Ø§ Ø³ÙØ± Ø§ÙØ¹Ù ÙÙØ© Ø§ÙØØ³Ø§Ø¨ÙØ©:
ÙÙÙØ°Ø§ ÙÙ Ø«ÙÙÙØ§ Ù٠جدÙÙ (ÙÙÙ ØµÙ ÙØ³Ø§ÙÙ ÙØ¯Ø§Ø¡ ÙØ§ØØ¯ ÙÙØ¯Ø§ÙØ© عÙÙ Ø§ÙØ¹Ùصر Ø§ÙØªØ§ÙÙ Ù٠اÙ٠صÙÙÙØ©):
sum |
current |
result | |
|---|---|---|---|
| the first call | 0 |
1 |
1 |
| the second call | 1 |
2 |
3 |
| the third call | 3 |
3 |
6 |
| the fourth call | 6 |
4 |
10 |
| the fifth call | 10 |
5 |
15 |
ÙÙØ°Ø§ ÙØ±Ù Ø¨ÙØ¶ÙØ Ø´Ø¯ÙØ¯ ÙÙÙ ÙØµÙر ÙØ§ØªØ¬ اÙÙØ¯Ø§Ø¡ Ø§ÙØ³Ø§Ø¨Ù Ø£ÙÙÙ ÙØ³ÙØ· Ù٠اÙÙØ¯Ø§Ø¡ Ø§ÙØ°Ù ÙÙØÙÙ.
ÙÙ ÙÙÙØ§ Ø£ÙØ¶Ùا ØØ°Ù اÙÙÙÙ Ø© Ø§ÙØ£ÙÙÙØ©:
let arr = [1, 2, 3, 4, 5];
// â«Ø£Ø²ÙÙØ§ اÙÙÙÙ
Ø© Ø§ÙØ£ÙÙÙØ© Ù
Ù Ø§ÙØªØ§Ø¨Ùع reduce (Ø§Ø®ØªÙØª اÙÙÙÙ
Ø© 0)
let result = arr.reduce((sum, current) => sum + current);
alert(result); // 15
ÙØ³ØªÙÙ٠اÙÙØªÙجة Ù ØªØ·Ø§Ø¨ÙØ©Ø إذ Ø£ÙÙ reduce تأخذ Ø£ÙÙ Ø¹ÙØµØ± ٠٠اÙ٠صÙÙÙØ© عÙ٠أÙÙÙ ÙÙÙ Ø© Ø£ÙÙÙØ© (ÙÙ ÙÙ ÙÙØ¯ÙÙ ÙØÙ ÙÙÙ Ø© Ø£ÙÙÙØ©) ÙØªØ¨Ø¯Ø£ Ø§ÙØ¹Ù ÙÙØ© Ù Ù Ø§ÙØ¹Ùصر Ø§ÙØ«Ø§ÙÙ.
جدÙÙ Ø§ÙØ¹Ù ÙÙØ© Ø§ÙØØ³Ø§Ø¨ÙØ© Ù ÙØ·Ø§Ø¨Ù ÙÙØ¬Ø¯ÙÙ Ø£Ø¹ÙØ§ÙØ ÙÙ ØØ°ÙÙØ§ Ø£Ù٠سطر ÙÙÙ. ÙÙÙ٠عÙÙÙ Ø£Ù ØªØØªØ±Ø³ ØÙÙ ÙØ§ ØªÙØ¯Ù٠تÙ٠اÙÙÙÙ Ø©. ÙÙ ÙØ§Ùت اÙ٠صÙÙÙØ© ÙØ§Ø±ØºØ© ÙÙØ¯Ø§Ø¡ reduce بدÙ٠اÙÙÙÙ Ø© Ø§ÙØ£ÙÙÙØ© Ø³ÙØ¹Ø·Ù٠خطأÙ.
٠ثا٠عÙ٠ذÙÙ:
let arr = [];
arr.reduce((sum, current) => sum + current);
Ø§ÙØ´ÙÙØ±Ø© Ø§ÙØ³Ø§Ø¨ÙØ© ستطÙÙ Ø®Ø·Ø£Ø Ø¥Ø° ÙØ§ ÙÙ Ù٠استدعاء reduce ٠ع ٠صÙÙÙØ© ÙØ§Ø±ØºØ© دÙÙ ÙÙÙ Ø© Ø£ÙÙÙØ©Ø ÙØªØÙ اÙÙ Ø´ÙÙØ© بتÙÙÙØ± ÙÙÙ Ø© Ø£ÙÙÙØ©Ø ÙØ³ØªØ¹Ø§Ø¯ Ø¢ÙØ°Ø§Ù. ÙØ°Ø§ Ø®ÙØ° ÙØ°Ù اÙÙØµÙØØ© ÙØØ¯ÙØ¯ ÙÙÙ Ø© Ø£ÙÙÙØ© دÙÙ ÙØ§.
ÙØ§ ÙØ®ØªÙÙ Ø§ÙØªØ§Ø¨Ùع arr.reduceRightØ¹Ù ÙØ°Ø§ Ø£Ø¹ÙØ§Ù Ø¥ÙØ§ بأÙÙÙ ÙØ¨Ø¯Ø£ ٠٠اÙÙÙ ÙÙ ÙÙÙØªÙ٠عÙ٠اÙÙØ³Ø§Ø±.
Array.isArray
اÙ٠صÙÙÙØ§Øª ÙÙØ³Øª ÙÙØ¹Ùا Ù ÙÙØµÙÙØ§ Ù٠اÙÙØºØ©Ø ب٠Ù٠٠بÙÙÙØ© عÙ٠اÙÙØ§Ø¦Ùات. ÙØ°Ø§ typeof Ù٠تÙÙØ¯Ù ÙÙ Ø§ÙØªÙرÙ٠بÙ٠اÙÙØ§Ø¦Ù Ø§ÙØ¹Ø§Ø¯Ù ÙØ§Ù٠صÙÙÙØ©:
alert(typeof {}); // object
alert(typeof []); // same
â¦ÙÙÙÙØ اÙ٠صÙÙÙØ§Øª ØªØ³ØªØ¹Ù Ù ÙØ«ÙØ±ÙØ§ Ø¬Ø¯ÙØ§ ÙØ¯Ø±Ø¬Ø© ØªÙØ¯ÙÙ ØªØ§Ø¨ÙØ¹ خاص ÙÙØ°Ø§ Ø§ÙØºØ±Ø¶: Array.isArray(value)â. ÙÙØ¹Ùد ÙØ°Ø§ Ø§ÙØªØ§Ø¨Ùع true ÙÙ ÙØ§Ùت value ٠صÙÙÙØ© ØÙÙØ§Ø Ùfalse ÙÙ Ù٠تÙÙ.
alert(Array.isArray({})); // false
alert(Array.isArray([])); // true
ØªØ¯Ø¹Ù Ø£ØºÙØ¨ Ø§ÙØªÙØ§Ø¨ÙØ¹ thisArg
ØªÙØ¨Ù Ø£ØºÙØ¨ ØªÙØ§Ø¨Ùع اÙ٠صÙÙÙØ§Øª ØªÙØ±ÙØ¨ÙØ§Ø Ø§ÙØªÙابع Ø§ÙØªÙ ØªØ³ØªØ¯Ø¹Ù Ø¯ÙØ§ÙÙØ§ (٠ث٠find Ùfilter ÙmapØ Ø¹Ø¯Ø§ sort) â ØªÙب٠اÙÙ ÙØ¹Ø§Ù Ù Ø§ÙØ§Ø®ØªÙار٠thisArg.
ÙÙ ÙØ´Ø±Ø ÙØ°Ø§ اÙÙ ÙØ¹Ø§Ù Ù ÙÙ Ø§ÙØ£ÙØ³Ø§Ù Ø£Ø¹ÙØ§Ù إذ Ø£ÙÙÙ ÙØ§Ø¯Ø±Ùا ٠ا ÙÙØ³ØªØ¹Ù Ù. ÙÙÙ٠عÙÙÙØ§ Ø§ÙØØ¯ÙØ« عÙÙ ÙØ£Ùا ÙÙÙÙ Ø§ÙØ´Ø±Ø ÙØ§ÙØµÙØ§.
ÙØ°Ù Ø§ÙØµÙاغة اÙÙØ§Ù ÙØ© ÙÙØ°Ù Ø§ÙØªÙØ§Ø¨ÙØ¹:
arr.find(func, thisArg);
arr.filter(func, thisArg);
arr.map(func, thisArg);
// ...
// â«Ø§ÙÙØ³ÙØ· thisArg Ù٠آخر ÙØ³ÙØ· Ø§Ø®ØªÙØ§Ø±Ù
تÙÙÙ ÙÙÙ Ø© اÙÙ ÙØ¹Ø§Ù Ù thisArg ÙÙØ¯Ø§ÙØ© func تساÙÙ this. ÙÙØ§ Ù Ø«ÙÙØ§ ÙØ³ØªØ¹Ù Ù ØªØ§Ø¨ÙØ¹ ÙØ§Ø¦Ù army عÙ٠أÙÙÙ Ù Ø±Ø´ÙØØ ÙØ§ÙÙØ³ÙØ· thisArg ÙÙ Ø±ÙØ± Ø³ÙØ§Ù Ø§ÙØªÙÙÙØ° ÙØ°ÙÙ ÙØ¥Ùجاد اÙ٠ستخد٠ÙÙ Ø§ÙØ°ÙÙ ÙØ¹Ùد Ø§ÙØªØ§Ø¨Ø¹ army.canJoin اÙÙÙÙ Ø© true:
let army = {
minAge: 18,
maxAge: 27,
canJoin(user) {
return user.age >= this.minAge && user.age < this.maxAge;
}
};
let users = [
{age: 16},
{age: 20},
{age: 23},
{age: 30}
];
// find users, for who army.canJoin returns true
let soldiers = users.filter(army.canJoin, army);
alert(soldiers.length); // 2
alert(soldiers[0].age); // 20
alert(soldiers[1].age); // 23
ÙÙ
Ù٠استبدا٠استدعاء users.filter(army.canJoin) Ø¨Ø§ÙØªØ¹ÙÙÙ
Ø© Ø§ÙØªÙ ØªÙØ¤Ø¯Ù٠ذات Ø§ÙØºØ±Ø¶ users.filter(user => army.canJoin(user)). ÙØ³ØªØ¹Ù
Ù Ø§ÙØ£ÙÙÙ Ø£ÙØ«Ø± Ù
Ù Ø§ÙØ«Ø§ÙÙØ© إذ Ø£Ù٠اÙÙØ§Ø³ تÙÙÙ
ÙØ§ Ø£ÙØ«Ø± Ù
٠تÙÙ.
Ù ÙØ®Øµ
ÙØ±ÙØ© ÙÙÙØ§ ÙÙ ØªÙØ§Ø¨Ùع Ø§ÙØ¯Ùا٠(ØºÙØ´Ù Ù ÙÙØ§):
A call to users.filter(army.canJoin, army) can be replaced with users.filter(user => army.canJoin(user)), that does the same. The latter is used more often, as itâs a bit easier to understand for most people.
-
push(...items)â ØªÙضÙÙ Ø§ÙØ¹Ùاصر items Ø¥Ù٠اÙÙÙØ§ÙØ©Ø -
pop()â ØªØ³ØªØ®Ø±Ø¬ Ø¹ÙØµØ±Ùا ٠٠اÙÙÙØ§ÙØ©Ø -
shift()â ØªØ³ØªØ®Ø±Ø¬ Ø¹ÙØµØ±Ùا Ù Ù Ø§ÙØ¨Ø¯Ø§ÙØ©Ø -
unshift(...items)â ØªÙضÙÙ Ø§ÙØ¹Ùاصر items Ø¥ÙÙ Ø§ÙØ¨Ø¯Ø§ÙØ©. -
splice(pos, deleteCount, ...items)â Ø¨Ø¯Ø¡Ùا Ù Ù Ø§ÙØ¹Ùصر ذ٠اÙÙÙØ±Ø³ posØ Ø§ØØ°Ù deleteCount Ù Ù Ø§ÙØ¹Ùاصر ÙØ£Ø¯Ø±Ùج Ù ÙØ§ÙÙ Ø§ÙØ¹Ùاصر items. -
slice(start, end)â Ø£ÙØ´ÙØ¦ ٠صÙÙÙØ© Ø¬Ø¯ÙØ¯Ø© ÙØ§Ùسخ Ø¹ÙØ§ØµØ±Ùا Ø¨Ø¯Ø¡ÙØ§ Ù Ù start ÙØØªÙÙend(ÙÙÙ٠دÙÙend). -
concat(...items)â Ø£Ø¹Ùد ٠صÙÙÙØ© Ø¬Ø¯ÙØ¯Ø©: Ø§ÙØ³Ø® ÙÙ Ø¹ÙØ§ØµØ± اÙ٠صÙÙÙØ© Ø§ÙØØ§ÙÙØ© ÙØ£Ø¶ÙÙ٠إÙÙÙØ§ Ø§ÙØ¹Ùاصر items. ÙÙ ÙØ§Ùت ÙØ§ØØ¯Ø© Ù Ù Ø¹ÙØ§ØµØ± items ٠صÙÙÙØ© Ø£ÙØ¶ÙØ§Ø ÙØ³ØªÙÙØ³Ø® Ø¹ÙØ§ØµØ±Ùا بدÙ⦠-
ÙØªØ¨ØØ« Ø¹Ù Ø§ÙØ¹Ùاصر:
- To add/remove elements:
push(...items)â adds items to the end,pop()â extracts an item from the end,shift()â extracts an item from the beginning,unshift(...items)â adds items to the beginning.splice(pos, deleteCount, ...items)â at indexposdeletesdeleteCountelements and insertsitems.slice(start, end)â creates a new array, copies elements from indexstarttillend(not inclusive) into it.concat(...items)â returns a new array: copies all members of the current one and addsitemsto it. If any ofitemsis an array, then its elements are taken.
- ÙÙÙ Ø±ÙØ± عÙÙ Ø¹ÙØ§ØµØ± اÙ٠صÙÙÙØ©:
-
forEach(func)â ÙØ³ØªØ¯Ø¹ÙfuncÙÙÙÙ Ø¹ÙØµØ± ÙÙØ§ ÙÙØ¹Ùد Ø£ÙÙ Ø´ÙØ¡. -
To transform the array:
-
map(func)â creates a new array from results of callingfuncfor every element. -
sort(func)â sorts the array in-place, then returns it. -
reverse()â reverses the array in-place, then returns it. -
split/joinâ convert a string to array and back. -
reduce/reduceRight(func, initial)â calculate a single value over the array by callingfuncfor each element and passing an intermediate result between the calls. -
map(func)â Ø£ÙØ´ÙØ¦ ٠صÙÙÙØ© Ø¬Ø¯ÙØ¯Ø© Ù Ù ÙØªØ§Ø¦Ø¬ استدعاء func ÙÙÙÙ Ù Ù Ø¹ÙØ§ØµØ± اÙ٠صÙÙÙØ©. -
sort(func)â Ø§Ùرز اÙ٠صÙÙÙØ© Ù٠ا ÙÙ ÙØ£Ø¹Ùد ÙØ§ØªØ¬ اÙÙØ±Ø². -
reverse()â Ø§Ø¹Ùس Ø¹ÙØ§ØµØ± اÙ٠صÙÙÙØ© Ù٠ا ÙÙ ÙØ£Ø¹Ùد ÙØ§ØªØ¬ Ø§ÙØ¹Ùس. -
split/joinâ ØÙÙ٠اÙ٠صÙÙÙØ© Ø¥ÙÙ Ø³ÙØ³ÙØ© ÙØµÙØ©Ø ÙØ§ÙØ¹ÙØ³ Ø£ÙØ¶Ùا. -
reduce(func, initial)â Ø§ØØ³Ø¨ ÙÙÙ Ø© ٠٠اÙ٠صÙÙÙØ© باستدعاء func عÙÙ ÙÙÙ Ø¹ÙØµØ± ÙÙÙØ§ ÙØªÙ Ø±ÙØ± اÙÙØ§ØªØ¬ بÙÙ ÙÙ٠استدعاء ÙØ¢Ø®Ø±.
-
- Additionally:
Array.isArray(arr)â ÙÙØØµ ÙÙ ÙØ§Ùتarr٠صÙÙÙØ© Ø£Ù ÙØ§. ÙØ§ØØ¸ Ø£ÙÙ Ø§ÙØªÙØ§Ø¨ÙØ¹sort,reverseÙspliceØªÙØ¹Ø¯Ù٠اÙ٠صÙÙÙØ© ÙÙØ³Ùا.
ÙØ°Ù Ø§ÙØªÙØ§Ø¨ÙØ¹ Ø£Ø¹ÙØ§Ù ÙÙ Ø£ØºÙØ¨ ٠ا ØªØØªØ§Ø¬ Ù٠ا ØªØ±ÙØ¯ Ø£ØºÙØ¨ اÙÙÙØª (99.99%). ÙÙÙÙ ÙÙØ§Ù Ø·Ø¨Ø¹ÙØ§ ØºÙØ±Ùا: +
- arr.some(fn)/arr.every(fn) check the array.
تÙÙØ§Ø¯Ù Ø§ÙØ¯Ø§ÙØ© fn عÙÙ ÙÙÙ Ø¹ÙØµØ± ٠٠اÙ٠صÙÙÙØ© (٠ث٠map). ÙÙ ÙØ§Ùت Ø£ÙÙØ§ Ù Ù (Ø£Ù ÙÙ) اÙÙØªØ§Ø¦Ø¬ trueØ ÙÙÙØ¹Ùد trueØ ÙØ¥ÙÙØ§ ÙÙØ¹Ùد false.
These methods behave sort of like || and && operators: if fn returns a truthy value, arr.some() immediately returns true and stops iterating over the rest of items; if fn returns a falsy value, arr.every() immediately returns false and stops iterating over the rest of items as well.
We can use every to compare arrays:
function arraysEqual(arr1, arr2) {
return arr1.length === arr2.length && arr1.every((value, index) => value === arr2[index]);
}
alert( arraysEqual([1, 2], [1, 2])); // true
-
arr.fill(value, start, end) â fills the array with repeating
valuefrom indexstarttoend. -
arr.copyWithin(target, start, end) â ÙÙØ³Ø® Ø§ÙØ¹Ùاصر Ù Ù Ø§ÙØ¹Ùصر ذا اÙÙÙØ±Ø³ start Ø¥Ù٠ذا اÙÙÙØ±Ø³ end ÙÙÙØµÙÙØ§ داخÙÙØ§ Ø¹ÙØ¯ اÙÙÙØ±Ø³ target (تعÙÙØ¶ ٠ا ÙÙ Ù ÙØ¬Ùد Ù ÙØ§ÙÙØ§ Ù٠اÙ٠صÙÙÙØ©).
-
arr.flat(depth)/arr.flatMap(fn) create a new flat array from a multidimensional array.
For the full list, see the manual.
ÙØ¯ ÙØ¨Ø¯Ù ٠٠اÙÙØ¸Ø±Ø© Ø§ÙØ£ÙÙ٠أ٠ÙÙØ§Ù Ø§ÙØ¹Ø¯Ùد Ù Ù Ø§ÙØ·Ø±Ù Ø ÙØµØ¹Ø¨ ØªØ°ÙØ±Ùا. ÙÙÙÙ Ù٠اÙÙØ§Ùع ÙØ°Ø§ أسÙÙ Ø¨ÙØ«Ùر.
Ø§ÙØ¸Ø± Ù Ù Ø®ÙØ§Ù ÙØ±ÙØ© Ø§ÙØºØ´ ÙÙØ· ÙØªÙÙ٠عÙÙ Ø¯Ø±Ø§ÙØ© Ø¨ÙØ§. ث٠ØÙ Ù ÙØ§Ù ÙØ°Ø§ اÙÙØµÙ ÙÙ٠٠ارسة Ø Ø¨ØÙØ« ÙÙÙÙ ÙØ¯Ù٠خبرة Ù٠أساÙÙØ¨ Ø§ÙØµÙÙÙ.
بعد ذÙÙ ÙÙ٠ا Ø§ØØªØ¬Øª Ø¥Ù٠اÙÙÙØ§Ù Ø¨Ø´ÙØ¡ ٠ع ٠صÙÙÙØ© Ø ÙÙØ§ تعر٠ÙÙÙ â ØªØ¹Ø§Ù ÙÙØ§ Ø Ø§ÙØ¸Ø± Ø¥ÙÙ ÙØ±ÙØ© Ø§ÙØºØ´ ÙØ§Ø¨ØØ« Ø¹Ù Ø§ÙØ·Ø±ÙÙØ© Ø§ÙØµØÙØØ©. Ø³ØªØ³Ø§Ø¹Ø¯Ù Ø§ÙØ£Ù Ø«ÙØ© عÙÙ ÙØªØ§Ø¨ØªÙا بشÙ٠صØÙØ. ÙØ±Ùبا٠سÙÙ ØªØªØ°ÙØ± Ø§ÙØ£Ø³Ø§ÙÙØ¨ تÙÙØ§Ø¦ÙÙØ§ Ø Ø¯Ù٠بذ٠جÙÙØ¯ Ù ØØ¯Ø¯Ø© Ù Ù Ø¬Ø§ÙØ¨Ù.
Ø§ÙØªØ¹ÙÙÙØ§Øª
<code>Ø ÙÙÙÙØ«Ùر Ù Ù Ø§ÙØ³Ø·Ùر استخدÙ<pre>Ø ÙÙØ£Ùثر Ù Ù 10 Ø³Ø·ÙØ± استخد٠(plnkr, JSBin, codepenâ¦)