অ্যান্ডস্কোর.জেজে আপনি যে সূচকটি সাজিয়ে রেখেছেন তা পাওয়া কি সম্ভব?


88

আমি জেএস লাইব্রেরি অ্যান্ডস্কোর এবং বিশেষত _.eachএবং _.sortbyলাইব্রেরি কলগুলি ব্যবহার করছি । আমি ভাবছি যে পুনরুক্তি প্রতিনিধিদের মধ্যে মান সূচক পাওয়ার কোনও সম্ভাব্য উপায় আছে কিনা?

_.sortBy([1, 4, 2, 66, 444, 9], function(num){ 
    /*It'd be great to have access to the index in here */
    return Math.sin(num); 
});

উত্তর:


163

সূচকটি আসলে উপলভ্য;

_.sortBy([1, 4, 2, 66, 444, 9], function(num, index){  });

লোডাসের মানচিত্রের জন্যও কাজ করে
সিসাবা টথ

6
দুঃখের বিষয়, লোড্যাশের সংস্করণ ৪.১17.৪ সংস্করণে এটি আসলে কাজ করে নাsortBy , যা সম্ভবত এই পরিস্থিতিতে জানার জন্য আরও সহায়ক।
জোনাথন ডুমাইন

82

তুমি তোমার পুনরুক্তিকারীর আরেকটি প্যারামিটার যোগ করে বর্তমান পুনরাবৃত্তির সূচী পেতে পারেন function, যেমন

_.each(['foo', 'bar', 'baz'], function (val, i) {
    console.log(i + ": " + val); // 0: foo, 1: bar, 2: baz
});

19

আপনি যদি বরং আপনার অ্যারের রূপান্তর করতে চান তবে iteratorআন্ডারস্কোর mapফাংশনের পরামিতিটিও দ্বিতীয় আর্গুমেন্ট হিসাবে সূচকে পাস করা হবে। সুতরাং:

_.map([1, 4, 2, 66, 444, 9], function(value, index){ return index + ':' + value; });

... ফেরত:

["0:1", "1:4", "2:2", "3:66", "4:444", "5:9"]

10

এর পুনরাবৃত্তিকে _.each3 টি পরামিতি সহ কল ​​করা হয় (element, index, list)। হ্যাঁ, আপনার জন্য _.eachক্যাব সূচকটি পান।

আপনি বাছাই করে একই কাজ করতে পারেন


6

আমি মনে করি এটি ইন্ডোরস্কোর _.Ech () অভ্যন্তরীণভাবে কীভাবে কাজ করে তা উল্লেখ করার মতো। পাসের তালিকাটি একটি অ্যারে অবজেক্ট বা কোনও বস্তু কিনা তা _.Ech (তালিকা, পুনরায়) পরীক্ষা করে।

তালিকার একটি অ্যারে হওয়ার ক্ষেত্রে, পুনরাবৃত্তি যুক্তিগুলি নীচের উদাহরণের মতো একটি তালিকা উপাদান এবং সূচি হবে:

var a = ['I', 'like', 'pancakes', 'a', 'lot', '.'];
_.each( a, function(v, k) { console.log( k + " " + v); });

0 I
1 like
2 pancakes
3 a
4 lot
5 .

অন্যদিকে, তালিকার আর্গুমেন্ট যদি কোনও বস্তু হয় তবে পুনরাবৃত্তি একটি তালিকার উপাদান এবং একটি কী গ্রহণ করবে:

var o = {name: 'mike', lastname: 'doe', age: 21};
_.each( o, function(v, k) { console.log( k + " " + v); });

name mike
lastname doe
age 21

রেফারেন্সের জন্য এটি অ্যান্ডস্কোর.জেএস ১.৮.৩ এর _.each () কোড

_.each = _.forEach = function(obj, iteratee, context) {
   iteratee = optimizeCb(iteratee, context);
   var i, length;
   if (isArrayLike(obj)) {
      for (i = 0, length = obj.length; i < length; i++) {
         iteratee(obj[i], i, obj);
      }
   } else {
      var keys = _.keys(obj);
      for (i = 0, length = keys.length; i < length; i++) {
         iteratee(obj[keys[i]], keys[i], obj);
      }
   }
   return obj;
};

1

আরও সাধারণভাবে, বেশিরভাগ পরিস্থিতিতে, আন্ডারস্কোর ফাংশন যা প্রথম দুটি আর্গুমেন্ট হিসাবে একটি তালিকা এবং যুক্তি গ্রহণ করে, পুনরাবৃত্তির শেষ আর্গুমেন্টের পরবর্তী হিসাবে তালিকা সূচকটিতে অ্যাক্সেস সরবরাহ করে। এই দুটি আন্ডারস্কোর ফাংশন, _.ড্রেস এবং _.ড্রেস রাইটের ক্ষেত্রে এটি একটি গুরুত্বপূর্ণ পার্থক্য, যা 'মেমো' কে তাদের তৃতীয় যুক্তি হিসাবে গ্রহণ করে - এই দুটি ক্ষেত্রে সূচকটি দ্বিতীয় যুক্তি হবে না, তবে তৃতীয়:

var destination = (function() {
    var fields = ['_333st', 'offroad', 'fbi'];
    return _.reduce(waybillInfo.destination.split(','), function(destination, segment, index) {
        destination[fields[index]] = segment;
        return destination;
    }, {});
})();

console.log(destination);            
/*
_333st: "NYARFTW  TX"
fbi: "FTWUP"
offroad: "UP"

The following is better of course but not demonstrate my point:
var destination = _.object(['_333st', 'offroad', 'fbi'], waybillInfo.destination.split(','));
*/

তাই আপনি যদি চেয়েছিলেন আপনি নিজেই আন্ডারস্কোর ব্যবহার সূচক পেতে পারে: _.last(_.initial(arguments))। একটি সম্ভাব্য ব্যতিক্রম (আমি চেষ্টা করিনি) _ _ ম্যাপ, কারণ এটি তালিকার পরিবর্তে কোনও অবজেক্ট নিতে পারে: "তালিকাটি যদি জাভাস্ক্রিপ্ট অবজেক্ট হয় তবে পুনরাবৃত্তির আর্গুমেন্টগুলি হবে (মান, কী, তালিকা)"। - দেখুন: http://underscorejs.org/# ম্যাপ


0

যখন উপলব্ধ থাকে, আমি বিশ্বাস করি যে বেশিরভাগ লোড্যাশ অ্যারে ফাংশনগুলি পুনরাবৃত্তিটি দেখায়। বাছাই করা ঠিক একইভাবে পুনরাবৃত্তি নয়: আপনি যখন 66 নম্বরে আছেন, আপনি শেষ না হওয়া অবধি অ্যারেটিতে চতুর্থ আইটেমটি প্রক্রিয়াকরণ করছেন না। একটি কাস্টম সাজানোর ক্রিয়াকলাপটি অ্যারে কয়েকবার লুপ করবে, সংলগ্ন সংখ্যাগুলিকে সামনের দিকে বা পিছনে নগ্ন করে, যতক্ষণ না সবকিছু তার যথাযথ স্থানে থাকে।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.