জাভাস্ক্রিপ্ট: বস্তুর পরিবর্তে আর্গুমেন্ট অ্যারে হয়েছে কিনা তা সনাক্ত করুন (নোড.জেএস)


87

আর্গুমেন্টটি অ্যারে হয় কিনা তা কীভাবে সনাক্ত করব কারণ typeof []প্রত্যাবর্তন হয় 'object'এবং আমি অ্যারে এবং অবজেক্টের মধ্যে পার্থক্য করতে চাই।

এটা সম্ভব যে অবজেক্টটি দেখতে কেমন {"0":"string","1":"string","length":"2"}তবে আমি চাই না এটি অ্যারে হিসাবে প্রকাশিত হয় যদি এটি আসলে কোনও অ্যারের মতো দেখতে কোনও অবজেক্ট থাকে।

JSON.parseএবং JSON.stringifyএই পার্থক্য করতে সক্ষম। আমি এটা কিভাবে করবো?

আমি নোড.জেএস ব্যবহার করছি যা ভি 8 এর উপর ভিত্তি করে ক্রোমের মতো।

উত্তর:


164
  • Array.isArray

নেটিভ ভি 8 ফাংশন এটি দ্রুত, এটি সর্বদা সঠিক। এটি ES5 এর অংশ।

  • arr instanceof Array

অ্যারে কনস্ট্রাক্টর দিয়ে বস্তুটি তৈরি হয়েছিল কিনা তা পরীক্ষা করে Che

আন্ডারস্কোর থেকে একটি পদ্ধতি। তাদের উত্স থেকে নেওয়া একটি স্নিপেট এখানে

var toString = Object.prototype.toString,
    nativeIsArray = Array.isArray;
_.isArray = nativeIsArray || function(obj) {
    return toString.call(obj) === '[object Array]';
};

এই পদ্ধতিটি একটি অবজেক্ট নেয় এবং এতে Object.prototype.toStringপদ্ধতিটিকে কল করে । এটি সর্বদা [object Array]অ্যারেগুলিতে ফিরে আসবে ।

আমার ব্যক্তিগত অভিজ্ঞতায় আমি toStringপদ্ধতিটি জিজ্ঞাসা করাকে সবচেয়ে কার্যকর বলে মনে করি তবে এটি এতটা সংক্ষিপ্ত বা পাঠযোগ্য instanceof Arrayনয় তত দ্রুত Array.isArrayনয় তবে এটি ইএস 5 কোড এবং আমি বহনযোগ্যতার জন্য এটি ব্যবহার এড়াতে চাইছি।

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


4
নোড.জেএসutil লাইব্রেরি ব্যবহার করুন - require('util').isArray(arr) nodejs.org/api/util.html#util_util_isarray_object
Kof

4
মৃদু অনুস্মারক, আমাদের প্রয়োজন ('ব্যবহার')। নোড v4.00 এবং উপরে উপরের অ্যারে (আর্ট)। এটি
হ্রাস করা

কোনওভাবে, নোড 10.x এ এটি দেখতে arr instanceof Arrayব্যর্থ হওয়ার মতো দেখাচ্ছে । তবে Array.isArray()কাজ দুর্দান্ত।
অ্যালেক্সিস উইল্ক 14:18


8

কেমন:

your_object instanceof Array

ক্রোমে ভি 8 এ পেয়েছি

[] instanceof Array
> true
({}) instanceof Array
> false 
({"0":"string","1":"string","length":"2"}) instanceof Array
> false

7

আমার কাছে মনে হচ্ছে এই প্রশ্নের বেশ কয়েকটি ভাল উত্তর রয়েছে তবে সম্পূর্ণতার জন্য আমি আরও একটি বিকল্প যুক্ত করব, যা আগে প্রস্তাবিত হয়নি have

কিছু অ্যারে কিনা তা পরীক্ষা করতে আপনি নোড.জেএস utilনেটিভ মডিউল এবং এর isArray()ফাংশন ব্যবহার করতে পারেন ।

উদাহরণ:

var util = require('util');

util.isArray([]);  // true
util.isArray(new Array); // true
util.isArray({"0":"string","1":"string","length":"2"}); // false

এই পদ্ধতির সাথে আপনাকে ভি 8 দ্বারা প্রয়োগ করা জেএস মানদণ্ডগুলি নিয়ে চিন্তা করতে হবে না কারণ এটি সর্বদা সঠিক উত্তরটি প্রদর্শন করবে।


4
এফডাব্লুআইডাব্লু, util.isArray()বর্তমানে প্রক্সিগুলি Array.isArray(): github.com/joyent/node/blob/…
টম স্পেন্সার

0

এইভাবে চেষ্টা করে দেখুন:
কনসোল.লগ (অবজেক্ট.প্রোটোটাইপ.টোস্ট্রিং.কল (আরগ)। রিপ্লেস (/ ^ [অবজেক্ট (। +)] $ /, '$ 1')। টুলওয়ারকেস ())

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