التعريف الحالي لـ _.without قبول المصفوفة كأول وسيطة ثم أي عدد من الوسائط التالية. أعلم أنه قد يصبح معقدًا ، لكنه سيكون مفيدًا ، إذا تمكنت من تمرير مصفوفة أخرى كحجة.
ستعمل الوظيفة الجديدة كـ
_.without ([1،2،3] ، [1 ، 2])
عائدات
[3]
على حد علمي _. بدون لا يعمل بعمق ، لذلك قد لا يكون الأمر معقدًا -
_.without ([1،2،3 ، [1]] ، [1] ، 1)
عائدات
[2 ، 3 ، [1]]
لحسن الحظ ، تحتوي JavaScript على طريقة مضمنة لتمرير وظيفة أي عدد من الوسائط.
https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/function/apply
_.without.apply(_, [1, 2, 3], [1, 2])
شيء أكيد! يا غبي كيف أنسى ...
يبدو أنه يجب تسميته بهذا الشكل
_.without.apply(_, [[1,2,3], 1, 2])
مما يجعل الأمر معقدًا بعض الشيء (فك تغيير صفيف الاستبعاد مع المصفوفة الأصلية).
تحديث: لقد أنشأت تذكرة جديدة لهذه المشكلة: https://github.com/documentcloud/underscore/issues/issue/118
يجب أن أوافق على كلاكما: إلى جيريمي للحفاظ على _. بدون توقيع متسق ولأوندري لإيجاد حل بديل اقترحه جيريمي قليلاً (لا يبدو أنه يعمل بالنسبة لي أيضًا).
وبالتالي ، أريد أن أقترح إدخال وظيفتين جديدتين للشرطة السفلية: _.difference(*arrays)
و _.symdifference(a,b)
: الاختلاف يكتشف جميع العناصر الموجودة في المصفوفة الأولى التي لا تظهر في المصفوفات الأخرى المتوفرة ، حيث تقوم _.symdifference () بإرجاع تلك العناصر الموجودة إما في a أو في b ولكن ليس في كليهما.
يأتي "الإلهام" لهذه الوظائف من نوع بيانات مجموعة Python و IMHO ، فلا ينبغي أن تقتصر على المصفوفات ، نظرًا لأنها قابلة للتطبيق أيضًا على الكائنات.
مجرد طريقة سريعة لكتابته مع الشرطة السفلية: _.without.apply (_، [x] .concat (y)) ، سيعيد مصفوفة من القيم في x بدون القيم في y.
تعمل إجابة rubenstolk إلا أنه لم يعلق على الكود الخاص به ، لذا تم تفسير
_.without.apply(_, [originalArray].concat(removeArray));
أعتقد أن Github لم يكن يفعل ذلك منذ عامينreggi!
بالنسبة لأولئك الذين يجدون طريقهم هنا .... _الفرق ([0 ، 1 ، 3 ، 9] ، [1 ، 3]) ؛ // => [0 ، 9]
أعلم أن هذا مغلق ، لكن عامل انتشار ES6 سيساعد في ذلك ؛)
لأي شخص لا يريد البحث عن عامل انتشار ES6 الذي ذكره agwidarsito ، ما يقوله هو أنه يمكنك القيام بذلك في ES6:
const items = [1,2,3,4];
const itemsToRemove = [3,4,5];
const result = _.without(items, ...itemsToRemove);
// result is [1,2]
شكرا لكaddisonbgross!
التعليق الأكثر فائدة
بالنسبة لأولئك الذين يجدون طريقهم هنا .... _الفرق ([0 ، 1 ، 3 ، 9] ، [1 ، 3]) ؛ // => [0 ، 9]
من: http://stackoverflow.com/questions/5722254/underscore-js-is-there-a-function-that-produces-an-array-thats-the-difference