একটি অ্যারেতে শেষ আইটেমটি পান


1142

এখন পর্যন্ত আমার জাভাস্ক্রিপ্ট কোডটি এখানে:

var linkElement = document.getElementById("BackButton");
var loc_array = document.location.href.split('/');
var newT = document.createTextNode(unescape(capWords(loc_array[loc_array.length-2]))); 
linkElement.appendChild(newT);

বর্তমানে এটি ইউআরএল থেকে অ্যারেতে দ্বিতীয় থেকে শেষ আইটেমটি নেয়। যাইহোক, আমি অ্যারেতে সর্বশেষ আইটেমটি চেক করতে চাই "index.html"এবং যদি তাই হয় তবে তার পরিবর্তে তৃতীয় থেকে শেষ আইটেমটি ধরুন।

উত্তর:


1225
if (loc_array[loc_array.length - 1] === 'index.html') {
   // do something
} else {
   // something else
}

: ইভেন্ট আপনার সার্ভার "index.html" এবং "index.html" ব্যবহার করেও ব্যাবহার করতে পারে একই ফাইল তোলে সালে .toLowerCase()

যদিও, আপনি যদি সম্ভব হয় তবে এই সার্ভার-সাইডটি করা বিবেচনা করতে চাইতে পারেন: এটি পরিষ্কার হবে এবং জেএসবিহীন লোকদের জন্য কাজ করবে।


1048

কোনও অসুবিধা আছে কিনা তা নিশ্চিত নন তবে এটি বেশ সংক্ষিপ্ত বলে মনে হচ্ছে:

arr.slice(-1)[0] 

অথবা

arr.slice(-1).pop()

undefinedঅ্যারে ফাঁকা থাকলে উভয়ই ফিরে আসবে ।


31
ডেস্ট্রাকচারিং ব্যবহার করা খুব ভাল:const [lastItem] = arr.slice(-1)
ডায়াডেলিক

@ ডিডিয়েডেলিক এটিই সবচেয়ে সরলতম উপায়! অসাধারণ!
ট্রুফা

1
.pop()মূল উপাদানটি পরিবর্তন করে যা সর্বশেষ উপাদানটি সরিয়ে দেয়। এটি কেবল সেই মানটি পুনরুদ্ধার করার মতো নয়।
বদরুশ

2
@ ব্র্যাড্রশ স্লাইস () একটি একক উপাদানের অনুলিপি সহ নতুন অ্যারে তৈরি করে এবং পপ কেবলমাত্র সেই অনুলিপিটিই পরিবর্তন করে। আসল অ্যারেটি ক্ষতিগ্রস্থ থেকে যায়
ক্রিটজিক্রতজি

এই কোডটি প্রায়শই না বলা হয় তবে আপনার নতুন অ্যারে তৈরি করা এড়ানো উচিত। অন্যথায় এটি আবর্জনা সংগ্রহের উপরে অতিরিক্ত চাপ সৃষ্টি করবে এবং / অথবা ব্রাউজারকে আরও মেমরি ব্যবহার করবে।
এমভিএমএন

259

অ্যারে.পপ ব্যবহার করুন :

var lastItem = anArray.pop();

গুরুত্বপূর্ণ : এটি শেষ উপাদানটি প্রদান করে এবং অ্যারে থেকে সরিয়ে দেয়


165

@ শাইগুই পোস্ট করেছেন তার একটি সংক্ষিপ্ত সংস্করণ:

Array.prototype.last = function() {
    return this[this.length - 1];
}

undefinedইতিমধ্যে -1 সূচক রিটার্ন পড়া ।

সম্পাদনা করুন:

এই দিনগুলিতে অগ্রাধিকারটি মডিউলগুলি ব্যবহার করা এবং প্রোটোটাইপ স্পর্শ করা বা বিশ্বব্যাপী নেমস্পেস ব্যবহার এড়াতে বলে মনে হচ্ছে।

export function last(array) {
    return array[array.length - 1];
}

8
যদি সুস্পষ্ট না কিভাবে এই আসলে ব্যবহার করা হয়, এখানে একটি উদাহরণ আছে: var lastItem = [3,2,1,5].last();। মান lastItemহয় 5
ব্যবহারকারী 128216

7
এই উত্তরটি সঠিক এবং এটি বেশ পরিষ্কার BUT (!!!) জাভাস্ক্রিপ্ট ব্যবহার করে থাম্বের একটি নিয়ম Do NOT modify objects you Do NOT own। এটি বিপজ্জনক কারণে অনেকগুলি কারণ, যেমন ১. আপনার দলে কাজ করা অন্যান্য বিকাশকারীরা এই পদ্ধতিটি মানহীন না হওয়ায় বিভ্রান্ত হতে পারে ২. লাইব্রেরিতে কোনও আপডেটের সাথে বা এমনকি একটি নিম্ন বা উচ্চতর ইসমাস্ক্রিপ্ট সংস্করণ ব্যবহার করলে এটি সহজেই হারিয়ে যেতে পারে!
ফরজাদ ওয়াইজেড

1
যে কারও জন্য অবাক হওয়ার জন্য, এটি অ্যারে.ফোরএচ () কে ভেঙে দেয়। আমি এখনও একমত যে প্রোটোটাইপগুলি সংশোধন করা সেখানে সবচেয়ে খারাপ জিনিস নয় তবে এটি একটি খারাপ।
সেফ রিড

1
ইমো পরিবর্তন করার ক্ষেত্রে এত বড় সমস্যা নেই Array.prototype, তবে আপনার ব্যবহার করা উচিত Object.assign(Array.prototype, 'last', { value: function () { … } });। অন্যথায় সম্পত্তি হবে অগণনীয়।
雨伞 雨伞


70

আসল এআরএই-তে কোনও প্রভাব ছাড়াই এটি কীভাবে পাবেন তা এখানে

a = [1,2,5,6,1,874,98,"abc"];
a.length; //returns 8 elements

আপনি যদি পপ () ব্যবহার করেন তবে এটি আপনার অ্যারে সংশোধন করবে

a.pop();  // will return "abc" AND REMOVES IT from the array 
a.length; // returns 7

তবে আপনি এটি ব্যবহার করতে পারেন তাই এটি মূল অ্যারেতে কোনও প্রভাব ফেলবে না :

a.slice(-1).pop(); // will return "abc" won't do modify the array 
                   // because slice creates a new array object 
a.length;          // returns 8; no modification and you've got you last element 

6
আপনার স্লাইস (-1) .পপ () করা উচিত, অন্যথায় আপনি পুরো অ্যারেটি অনুলিপি করেন (আপনাকে কেবলমাত্র শেষ উপাদানটি অনুলিপি করতে হবে)।
kritzikratzi

তার জন্য আর দরকার নেই pop(): কেবল করুনarr.slice(-1)[0]
ক্রিস্টোফ মারোইস

56

"সবচেয়ে পরিষ্কার" ইএস 6 উপায় (আইএমও) হ'ল:

const foo = [1,2,3,4];
const bar = [...foo].pop();

এই এড়াতে mutating foo, যেমন .pop()করতেন, যদি আমরা বিস্তার অপারেটর ব্যবহৃত হয়নি।
বলেছিল, আমি foo.slice(-1)[0]সমাধানটিও পছন্দ করি ।


1
এছাড়াও আপনি অ্যারে ডেসট্রাকচারিং করতে ব্যবহার করতে পারেন আরো ); ES6 stackoverflow.com/a/46485581/31671
Alex

36
নোট করুন যে এই সমাধানটি পুরো অ্যারের একটি অনুলিপি সম্পাদন করে।
ব্রেন্ডন অ্যানিয়েবল

4
এটি ঠিক যেমন অপঠনযোগ্য .slice(-1)[0]তবে ধীর। পাশাপাশি ব্যবহার করতে পারে.slice
1918

12
কেবলমাত্র "পরিষ্কার" বাক্য গঠনের জন্য পুরো অ্যারেটি অনুলিপি করা আমার কাছে বোকা। এমনকি এটি
দেখতেও

43

আমি বরং array.pop()সূচকের চেয়ে ব্যবহার করব ।

while(loc_array.pop()!= "index.html"){
}
var newT = document.createTextNode(unescape(capWords(loc_array[loc_array.length])));

এইভাবে আপনি সর্বদা সূচিপত্রের পূর্ববর্তী উপাদানটি পান। সূচিপত্রের শিরোনামটি সরবরাহ করে (আপনার অ্যারে বিচ্ছিন্নভাবে সূচিপত্রকে একটি আইটেম হিসাবে পৃথক করে দেওয়া হয়েছে)। দ্রষ্টব্য: আপনি অ্যারে থেকে শেষ উপাদানগুলি হারাবেন।


38

আমি মনে করি আপনি যদি কেবল অপসারণ ছাড়াই উপাদানটি পেতে চান তবে এটি আরও সহজ ব্যবহার:

arr.slice(-1)[0]

দ্রষ্টব্য: অ্যারেটি খালি থাকলে (উদা। []) এটি ফিরে আসবেundefined

যাইহোক, আমি পারফরম্যান্স চেক করিনি, তবে আমি মনে করি লিখতে আরও সহজ এবং পরিষ্কার


দ্রষ্টব্য যে) এটি শেষ মানটি দেয় না তবে শেষ উপাদান ( arr.slice(-1)[0] === arr[arr.length - 1]) সহ একটি অ্যারে দেয় , এবং খ) এটি ধীর হয় কারণ এটি arrএকটি নতুন অ্যারেতে অনুলিপি করে ( পারফরম্যান্স পরিমাপের জন্য stackoverflow.com/a/51763533/2733244 দেখুন )।
ওয়ার্টওয়ার্ট

33

const [lastItem] = array.slice(-1);

-1 দিয়ে অ্যারে.প্রোটোটাইপ.স্লাইসটি মূল অ্যারের কেবলমাত্র শেষ আইটেম যুক্ত একটি নতুন অ্যারে তৈরি করতে ব্যবহার করা যেতে পারে, তারপরে আপনি সেই নতুন অ্যারের প্রথম আইটেমটি ব্যবহার করে একটি ভেরিয়েবল তৈরি করতে ডিস্ট্রাকচারিং অ্যাসাইনমেন্ট ব্যবহার করতে পারেন ।

const lotteryNumbers = [12, 16, 4, 33, 41, 22];
const [lastNumber] = lotteryNumbers.slice(-1);

console.log(lotteryNumbers.slice(-1));
// => [22]
console.log(lastNumber);
// => 22


30

একটি অ্যারের শেষ আইটেমটি পাওয়া স্লাইস পদ্ধতিতে নেতিবাচক মানগুলির সাহায্যে অর্জন করা যায় ।

আপনি নীচে এখানে এটি সম্পর্কে আরও পড়তে পারেন ।

var fileName = loc_array.slice(-1)[0];
if(fileName.toLowerCase() == "index.html")
{
  //your code...
}

পপ () ব্যবহার করা আপনার অ্যারে পরিবর্তন করবে, যা সর্বদা ভাল ধারণা নয়।


1
স্লাইস একটি অ্যারে প্রদান করে, যদিও, এই উত্তরটিরarr.slice(-1)[0] মতো ব্যবহার করুন ।
সিস টিমারম্যান

4
পারফরম্যান্স যদি কোনও সমস্যা হয় তবে জেনে রাখুন যে এই পদ্ধতিটি array[array.length - 1] jsperf.com/get-last-item-from-array/13 এর
ব্রুনো পেরেস

29

আপনি এই প্যাটার্নটি ব্যবহার করতে পারেন ...

let [last] = arr.slice(-1);

এটি বরং সুন্দরভাবে পড়ার সময়, মনে রাখবেন এটি একটি নতুন অ্যারে তৈরি করে যাতে এটি অন্যান্য সমাধানগুলির চেয়ে কম দক্ষ তবে এটি আপনার অ্যাপ্লিকেশনটির কার্যক্ষমতা বাধা হতে পারে না


25

এই প্রশ্নটি দীর্ঘকাল ধরে রয়েছে, তাই আমি অবাক হয়েছি যে কেউই শেষের উপাদানটিকে একটি এর পরে ফিরিয়ে রাখার কথা উল্লেখ করেনি pop()

arr.pop()ঠিক হিসাবে দক্ষ arr[arr.length-1]এবং উভয় হিসাবে একই গতি arr.push()

অতএব, আপনি এগুলি সাথে পালাতে পারেন:

--- সম্পাদনা করা [ চাপ দেওয়ার আগে thePopতা যাচাই করুন undefined] ---

let thePop = arr.pop()
thePop && arr.push(thePop)

--- শেষ সম্পাদনা ---

যা এটিকে হ্রাস করা যেতে পারে (একই গতি [সম্পাদনা: তবে অনিরাপদ!]):

arr.push(thePop = arr.pop())    //Unsafe if arr empty

এটি দ্বিগুণ হিসাবে ধীর arr[arr.length-1], তবে আপনার কোনও সূচী দিয়ে স্টাফ করতে হবে না। যে কোনও দিন সোনার মূল্য।

সমাধানের চেষ্টা করেছি এবং এক্সিকিউশন সময় ইউনিট (ইটিইউ) এর বহুগুণে arr[arr.length-1]:

[পদ্ধতি] .............. [ETUs 5 এলিম] ... [ETU 1 মিলিয়ন এলিমি]

arr[arr.length - 1]      ------> 1              -----> 1

let myPop = arr.pop()
arr.push(myPop)          ------> 2              -----> 2

arr.slice(-1).pop()      ------> 36             -----> 924  

arr.slice(-1)[0]         ------> 36             -----> 924  

[...arr].pop()           ------> 120            -----> ~21,000,000 :)

শেষের তিনটি বিকল্প, বিশেষত [...arr].pop(), অ্যারের আকার বাড়ার সাথে সাথে আরও খারাপ হয়ে যায়। আমার মেশিনের স্মৃতি সীমাবদ্ধতা ছাড়াই একটি মেশিনে [...arr].pop()সম্ভবত এটি 120: 1 অনুপাতের মতো কিছু বজায় রাখে। তবুও, কেউ রিসোর্স হগ পছন্দ করে না।


3
যদি প্রাথমিক অ্যারেটি খালি থাকতে পারে তবে এই পদ্ধতির ফলস্বরূপ ভুল []হবে এবং রূপান্তরিত হবে [undefined]। আপনাকে সুস্পষ্ট undefinedচেক দিয়ে পশ্চাদপদ ধাক্কা রক্ষা করতে হবে , এরকম কিছুmyPop !== undefined && arr.push(myPop)
ilt

23

যদি কেউ একবারে শেষ উপাদান পেতে চায় তবে সে ব্যবহার করতে পারে Array#splice():

lastElement = document.location.href.split('/').splice(-1,1);

এখানে, কোনও অ্যারেতে বিভক্ত উপাদানগুলি সংরক্ষণ করার প্রয়োজন নেই, এবং তারপরে শেষ উপাদানটি পেতে। শেষ উপাদানটি পাওয়া যদি একমাত্র উদ্দেশ্য হয় তবে এটি ব্যবহার করা উচিত।

দ্রষ্টব্য: এটি এর শেষ উপাদানটি সরিয়ে মূল অ্যারে পরিবর্তন করেsplice(-1,1)একটি pop()ফাংশন হিসাবে ভাবেন যা শেষ উপাদানটিকে পপ করে।


5
এটি কি সর্বশেষ উপাদানটির পরিবর্তে একটি অ্যারেতে শেষ উপাদানটি ফেরত দেয় না?

2
@ টাজাজাবুরো একই জিনিস নয়?
আরাম কোচার্যান

5
এটি অ্যারে পরিবর্তন করে। আসল অ্যারেটি ছোঁয়াতে আপনি স্প্লাইস (-1) এর পরিবর্তে স্লাইস (-1) ব্যবহার করতে পারেন। @ আরকোচর্যিয়ান এটির নয়, তুলনা ["hi"]বনাম "hi"
kritzikratzi

20

যারা অ্যারে প্রোটোটাইপ ওভারলোড করতে ভয় পান না তাদের জন্য (এবং গণনার মুখোশ দিয়ে আপনার হওয়া উচিত নয়):

Object.defineProperty( Array.prototype, "getLast", {
    enumerable: false,
    configurable: false,
    writable: false,
    value: function() {
        return this[ this.length - 1 ];
    }
} );


18

আমি সাধারণত আন্ডারস্কোর ব্যবহার করি , এটির সাহায্যে আপনি কেবল পারেন

if (_.last(loc_array) === 'index.html'){
  etc...
}

আমার জন্য এটি এর চেয়ে বেশি শব্দার্থক loc_array.slice(-1)[0]


18

আপনি যদি এখানে সন্ধান করতে এসে থাকেন তবে এখানে আরও জাভাস্ক্রিপ্ট আর্ট রয়েছে

ব্যবহার করা reduceRight()হলেও অন্য একটি উত্তরের চেতনায় :

[3, 2, 1, 5].reduceRight(a => a);

এটি এই সত্যের উপর নির্ভর করে যে আপনি প্রাথমিক মান সরবরাহ না করার ক্ষেত্রে একেবারে শেষ উপাদানটি প্রাথমিক হিসাবে নির্বাচিত হয়েছে ( এখানে ডকগুলি পরীক্ষা করুন) )। যেহেতু কলব্যাকটি কেবল প্রাথমিক মানটি ফেরত চলেছে, শেষ উপাদানটি শেষের দিকে ফিরে আসবে।

এটিকে জাভাস্ক্রিপ্ট আর্ট হিসাবে বিবেচনা করা উচিত, সাবধান হন এবং আমি এটি করার পরামর্শ দিচ্ছি না তা বেশিরভাগ ক্ষেত্রে এটি ও (এন) সময়ে চলবে, তবে এটি পাঠযোগ্যতায় ব্যথা দেয় বলেও সাবধান হন।

এবং এখন গুরুতর উত্তরের জন্য

আমি দেখতে সবচেয়ে ভাল উপায় (আপনি বিবেচনা করে এটি আরও সংক্ষিপ্ত চান array[array.length - 1]) এটি হ'ল:

const last = a => a[a.length - 1];

তারপরে কেবল ফাংশনটি ব্যবহার করুন:

last([3, 2, 1, 5])

[3, 2, 1, 5]উপরের মতো কোনও বেনামে অ্যারের সাথে আপনি যদি ডিল করছেন এমন ক্ষেত্রে এই ফাংশনটি আসলে কার্যকর , অন্যথায় আপনাকে এটি দু'বার ইনস্ট্যান্ট করতে হবে, যা অদক্ষ এবং কুরুচিপূর্ণ হবে:

[3, 2, 1, 5][[3, 2, 1, 5].length - 1]

বিতৃষ্ণা।

উদাহরণস্বরূপ, এখানে এমন একটি পরিস্থিতি রয়েছে যেখানে আপনার একটি বেনামে অ্যারে রয়েছে এবং আপনাকে একটি ভেরিয়েবল সংজ্ঞায়িত করতে হবে তবে আপনি তার last()পরিবর্তে ব্যবহার করতে পারেন :

last("1.2.3".split("."));

16

এখানে অন্য একটি বিকল্প রাখছি।

loc_array.splice(-1)[0] === 'index.html'

আমি উপরের পদ্ধতির আরও পরিষ্কার এবং সংক্ষিপ্ত অনলাইন পেয়েছি। দয়া করে, এটি চেষ্টা করার জন্য নির্দ্বিধায়

দ্রষ্টব্য: এটি আসল অ্যারেটি সংশোধন করবে, আপনি যদি এটি পরিবর্তন করতে না চান তবে আপনি ব্যবহার করতে পারেন slice()

loc_array.slice(-1)[0] === 'index.html'

এটি প্রকাশ করার জন্য @ বিনয়পাইকে ধন্যবাদ ।


মন্তব্য অনুযায়ী stackoverflow.com/users/510036/qix-monica-was-mistreated এই পোস্টে stackoverflow.com/questions/9050345/... এবং পরীক্ষা jsperf.com/last-array-element2 অত্যন্ত ধীর যে
সুভাষ

13

জাভাস্ক্রিপ্টে একটি অ্যারের শেষ মান সন্ধানের একাধিক উপায়

  • মূল অ্যারে প্রভাবিত না করে

var arr = [1,2,3,4,5];

console.log(arr.slice(-1)[0])
console.log(arr[arr.length-1])
const [last] = [...arr].reverse();
console.log(last)
console.log(arr.reverse()[0])

  • মূল অ্যারে পরিবর্তন করে

var arr = [1,2,3,4,5];

console.log(arr.pop())
arr.push(5)
console.log(...arr.splice(-1));

  • নিজস্ব সহায়ক পদ্ধতি তৈরি করে

let arr = [1, 2, 3, 4, 5];

Object.defineProperty(arr, 'last', 
{ get: function(){
  return this[this.length-1];
 }
})

console.log(arr.last);


যদি আপনার প্রথম উদাহরণ যেখানে আপনি "মূল অ্যারেটিকে প্রভাবিত না করে" এবং প্রস্তাবিত হিসাবে কাজ করার মাধ্যমে উল্লেখ করেছেন: console.log(arr.reverse()[0]) - অভিনন্দন, আপনি কেবল আসল অ্যারেটি পরিবর্তন করেছেন।
রোকো সি বুলজান


10

ব্যক্তিগতভাবে আমি কুপরিফিক / ক্রিটজিক্রাটজি দ্বারা উত্তরটি উত্সাহিত করব। যদি আপনি নেস্টেড অ্যারেগুলির সাথে কাজ করছেন তবে অ্যারে [অ্যারে। দৈর্ঘ্য -১] পদ্ধতিটি খুব কুৎসিত হয়।

var array = [[1,2,3], [4,5,6], [7,8,9]]

array.slice(-1)[0]

//instead of 

array[array.length-1]

//Much easier to read with nested arrays

array.slice(-1)[0].slice(-1)[0]

//instead of

array[array.length-1][array[array.length-1].length-1]

10

ইসমাস্ক্রিপ্ট প্রস্তাবের প্রথম পর্যায়ে একটি অ্যারে সম্পত্তি যুক্ত করার পরামর্শ রয়েছে যা শেষ উপাদানটি ফিরিয়ে দেবে: প্রস্তাবনা-অ্যারে-লাস্ট

বাক্য গঠন:

arr.lastItem // get last item
arr.lastItem = 'value' // set last item

arr.lastIndex // get last index

পলিফিল ব্যবহার করতে পারেন ।

প্রস্তাব লেখক: কিথ সির্কেল ( চেই অটোর)


10

উত্স অ্যারে থেকে শেষ আইটেমটি অপসারণ রোধ করতে আপনি ব্যবহার করতে পারেন

Array.from(myArray).pop()

বেশিরভাগই সমস্ত ব্রাউজারের সমর্থিত (ES6)


1
100.000 উপাদান বা তারও বেশি বড় অ্যারে সহ শুভকামনা।
সলডেপ্লাটা সাকেটোস

9

আপনি প্রোটোটাইপে একটি last()ফাংশন যুক্ত করতে পারেন Array

Array.prototype.last = function () {
    return this[this.length - 1];
};

9

আপনি যা ব্যবহার করেন না তা কেবল ব্যবহার করবেন না reverse()!!!

কয়েকটি উত্তরের উল্লেখ রয়েছে reverseতবে এই সত্যটি উল্লেখ করবেন না যে reverseআসল অ্যারেটি সংশোধন করে এবং (কোনও কোনও ভাষা বা ফ্রেমওয়ার্কের মতো) কোনও অনুলিপিও দেয় না।

var animals = ['dog', 'cat'];

animals.reverse()[0]
"cat"

animals.reverse()[0]
"dog"

animals.reverse()[1]
"dog"

animals.reverse()[1]
"cat"

এটি সবচেয়ে খারাপ ধরণের কোড হতে পারে ডিবাগ করার জন্য!


4
আপনি যদি আপনার অ্যারের বিপরীত অনুলিপি চান , আপনি এখন স্প্রেড অপারেটরটি ব্যবহার করতে পারেন। যেমন[...animals].reverse()
জোশ আর

বিপরীত ব্যবহারের আগে আপনি কেবল অ্যারে অনুলিপি করতে পারেন[1,3,4,5,"last"].slice().reverse()[0]
ম্যাডিয়ো

9

ES6 অবজেক্টের ডেস্ট্রাকচারিংয়ের আরও একটি উপায়।

const {length, [length-1]: last}=[1,2,3,4,5]
console.log(last)

আপনি বস্তুর ডিস্ট্রাকচারিং ব্যবহার করে অ্যারে থেকে দৈর্ঘ্যের সম্পত্তিটি বের করেন । আপনি [দৈর্ঘ্য -১] দ্বারা ইতিমধ্যে নিষ্কাশিত কী ব্যবহার করে অন্য একটি গতিশীল কী তৈরি করেন এবং এটিকে সর্বশেষে এক লাইনে নির্ধারণ করুন।


কিছুটা জটিল তবে চালাক
এড্রিয়েন কাস্তগলিয়োলা

ধন্যবাদ, আপনি কি ঠিক কি তা ব্যাখ্যা করতে পারেন?
তরুণ নাগপাল

8

আপনি এর প্রোটোটাইপে একটি নতুন সম্পত্তি গেটর যুক্ত করতে পারেন যাতে এটি সমস্ত দৃষ্টান্তের মাধ্যমে অ্যাক্সেসযোগ্য ।ArrayArray

যাত্রীরা আপনাকে কোনও ফাংশনের রিটার্ন মানটি ঠিক যেমন কোনও সম্পত্তির মান হিসাবে অ্যাক্সেস করার অনুমতি দেয়। অবশ্যই ফাংশনের রিটার্ন মান হ'ল অ্যারের শেষ মান (this[this.length - 1] )।

অবশেষে আপনি এটিকে এমন অবস্থায় lastআবদ্ধ করুন যা প্রপার্টি এখনও রয়েছে কিনা তা পরীক্ষা করে undefined(এটির উপর নির্ভর করে এমন কোনও অন্য স্ক্রিপ্ট দ্বারা সংজ্ঞায়িত করা হয়নি)।

if(typeof Array.prototype.last === 'undefined') {
    Object.defineProperty(Array.prototype, 'last', {
        get : function() {
            return this[this.length - 1];
        }
    });
}

// Now you can access it like
[1, 2, 3].last;            // => 3
// or
var test = [50, 1000];
alert(test.last);          // Says '1000'

আইই ≤ 8 এ কাজ করে না।


Array.prototype.lastসবসময় undefined? ইফ যদি ক্রোম 36 এর অধীনে কাজ করে না
23:44

7

সম্পাদিত:

সম্প্রতি আমি আরও একটি সমাধান নিয়ে এসেছি যা আমি এখন আমার প্রয়োজনের জন্য সেরা বলে মনে করি:

function w(anArray) {
  return {
    last() {
      return anArray [anArray.length - 1];
    };
  };
}

উপরের সংজ্ঞাটি কার্যকরভাবে আমি এখন বলতে পারি:

let last = w ([1,2,3]).last();
console.log(last) ; // -> 3

নাম "w" অর্থ "মোড়ক"। আপনি দেখতে পারেন যে কীভাবে আপনি সহজেই এই র‍্যাপারটিতে 'শেষ ()' ছাড়াও আরও বেশি পদ্ধতি যুক্ত করতে পারেন।

আমি "আমার প্রয়োজনের জন্য সেরা" বলি, কারণ এটি আমাকে অন্য যে কোনও জাভাস্ক্রিপ্ট বিল্ট-ইন টাইপের সাথে এই জাতীয় "সহায়ক পদ্ধতি" সহজেই যুক্ত করতে দেয়। যা মনে আসে তা হ'ল উদাহরণস্বরূপ লিস্পের গাড়ি () এবং সিডিআর ()।


কেন একটি মোড়ক ব্যবহার করবেন? যদি আপনাকে কোনও wফাংশন কল করতে হয় তবে কেবল ফাংশনটি শেষ আইটেমটি ফিরিয়ে দিন।
fregante

w([1,2,3]).lengthঅনির্ধারিত. w([1,2,3])[1]অনির্ধারিত. আমার কাছে মোড়কের মতো মনে হয় না। এবং একটি বাক্য গঠন ত্রুটি আছে। আপনার একটি অতিরিক্ত ';' রয়েছে। দেখুন stackoverflow.com/a/49725374/458321 কিভাবে একটি বর্গ মোড়কের (SutString বর্গ) এবং ব্যবহারের প্রতিফলন যে মোড়কের পূরণ লিখতে জন্য। যদিও, ইমো, মোড়কগুলি ওভারকিল। আপনার মতো প্রায় এনক্যাপসুলেশন ব্যবহার করা আরও ভাল। return { arr: anArray, last() { return anArray[anArray.length - 1]; } };। এছাড়াও, ডাব্লু উপায় খুব জেনেরিক। কলটি অ্যারেডাব্লু বা অন্য কিছু।
তমুসজেরোয়েস

6

আমি মনে করি সবচেয়ে সহজ এবং সুপার অদক্ষ উপায় হ'ল:

var array = ['fenerbahce','arsenal','milan'];
var reversed_array = array.reverse(); //inverts array [milan,arsenal,fenerbahce]
console.log(reversed_array[0]) // result is "milan".

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