javascript - array in java




বস্তু একটি অ্যারে কিনা পরীক্ষা করে দেখুন? (20)

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

সুতরাং কিভাবে পরিবর্তনশীল একটি অ্যারে আমি চেক করব?

আমি নীচের বিভিন্ন সমাধান বৃত্তাকার করেছি এবং একটি jsperf পরীক্ষা তৈরি করেছেন


Array.isArray দ্রুত কাজ করে তবে এটি ব্রাউজারের সমস্ত সংস্করণ দ্বারা সমর্থিত নয়। সুতরাং আপনি অন্যদের জন্য ব্যতিক্রম করতে এবং সর্বজনীন পদ্ধতি ব্যবহার করতে পারেন:

    Utils = {};    
    Utils.isArray = ('isArray' in Array) ? 
        Array.isArray : 
        function (value) {
            return Object.prototype.toString.call(value) === '[object Array]';
        }

jQuery এছাড়াও একটি $.isArray() পদ্ধতি প্রদান করে:

var a = ["A", "AA", "AAA"];

if($.isArray(a)) {
  alert("a is an array!");
} else {
  alert("a is not an array!");
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>


আধুনিক ব্রাউজারে আপনি করতে পারেন

Array.isArray(obj)

(ক্রোম 5, ফায়ারফক্স 4.0, IE 9, অপেরা 10.5 এবং সাফারি 5 দ্বারা সমর্থিত )

পিছনে সামঞ্জস্যের জন্য আপনি নিম্নলিখিত যোগ করতে পারেন

# only implement if no native implementation is available
if (typeof Array.isArray === 'undefined') {
  Array.isArray = function(obj) {
    return Object.prototype.toString.call(obj) === '[object Array]';
  }
};

আপনি যদি jQuery ব্যবহার করেন তবে আপনি jQuery.isArray(obj) বা $.isArray(obj) ব্যবহার করতে পারেন। আপনি যদি আন্ডারস্কোর ব্যবহার করেন তবে আপনি _.isArray(obj) ব্যবহার করতে পারেন

আপনি যদি বিভিন্ন ফ্রেমে তৈরি অ্যারে সনাক্ত করার প্রয়োজন হয় না তবে আপনি শুধু instanceof ব্যবহার করতে পারেন

obj instanceof Array

আপনি আপনার ভেরিয়েবলের ধরনটি পরীক্ষা করে দেখতে পারেন কিনা এটি একটি অ্যারে রয়েছে;

var myArray=[];

if(myArray instanceof Array)
{
....
}

আপনি এটি চেষ্টা করতে পারেন:

var arr = []; (or) arr = new Array();
var obj = {}; (or) arr = new Object();

arr.constructor.prototype.hasOwnProperty('push') //true

obj.constructor.prototype.hasOwnProperty('push') // false

আপনি নীচের এই অ্যারের অনুমান করুন:

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

জাভাস্ক্রিপ্ট (নতুন এবং পুরানো ব্রাউজার):

function isArray(arr) {
  return arr.constructor.toString().indexOf("Array") > -1;
}

অথবা

function isArray(arr) {
  return arr instanceof Array;
}

অথবা

function isArray(arr) {
  return Object.prototype.toString.call(arr) === '[object Array]';
}

তারপর এটি এই মত কল:

isArray(arr);

জাভাস্ক্রিপ্ট (IE9 +, Ch5 +, FF4 +, Saf5 +, অপেরা 10.5 +)

Array.isArray(arr);

JQuery:

$.isArray(arr);

কৌণিক:

angular.isArray(arr);

আন্ডারস্কোর এবং লোডশ:

_.isArray(arr);

আপনি যে বস্তুর সাথে ডিল করছেন তা পরীক্ষা করার জন্য আমি একটি ফাংশন তৈরি করব ...

function whatAmI(me){ return Object.prototype.toString.call(me).split(/\W/)[2]; }

// tests
console.log(
  whatAmI(["aiming","@"]),
  whatAmI({living:4,breathing:4}),
  whatAmI(function(ing){ return ing+" to the global window" }),
  whatAmI("going to do with you?")
);

// output: Array Object Function String

তাহলে আপনি বিবৃতিতে একটি সহজ লিখতে পারেন ...

if(whatAmI(myVar) === "Array"){
    // do array stuff
} else { // could also check `if(whatAmI(myVar) === "String")` here to be sure
    // do string stuff
}

আপনি হতে পারে Array পদ্ধতি কিন্তু আমি চেক করতে চাই

Object.getPrototypeOf(yourvariable) === Array.prototype


আমি জানি, লোকেরা কিছু ধরনের কাঁচা জাভাস্ক্রিপ্ট পদ্ধতির সন্ধান করছে। কিন্তু যদি আপনি কম সম্পর্কে চিন্তা করতে চান তবে এখানে দেখুন: http://underscorejs.org/#isArray

_.isArray(object) 

বস্তু একটি অ্যারে যদি সত্য ফেরত।

(function(){ return _.isArray(arguments); })();
=> false
_.isArray([1,2,3]);
=> true

আমি দুটি বিকল্প পদ্ধতির পাশাপাশি ত্রুটি পরীক্ষণের সাথে jsperf fiddle আপডেট করেছি।

এটি প্রমাণ করে যে 'অবজেক্ট' এবং 'অ্যারে' প্রোটোটাইপগুলির মধ্যে একটি স্থির মান সংজ্ঞায়িত পদ্ধতিটি অন্য কোনও পদ্ধতির চেয়ে দ্রুততর। এটি একটি কিছুটা বিস্ময়কর ফলাফল।

/* Initialisation */
Object.prototype.isArray = function() {
  return false;
};
Array.prototype.isArray = function() {
  return true;
};
Object.prototype._isArray = false;
Array.prototype._isArray = true;

var arr = ["1", "2"];
var noarr = "1";

/* Method 1 (function) */
if (arr.isArray()) document.write("arr is an array according to function<br/>");
if (!noarr.isArray()) document.write("noarr is not an array according to function<br/>");
/* Method 2 (value) - **** FASTEST ***** */
if (arr._isArray) document.write("arr is an array according to member value<br/>");
if (!noarr._isArray) document.write("noarr is not an array according to member value<br/>");

ভেরিয়েবল অনির্ধারিত মানটি নেয় তবে এই দুটি পদ্ধতিগুলি কাজ করে না, তবে আপনি যদি নিশ্চিত হন যে তাদের মূল্য আছে তবে তারা কাজ করে। একটি মান একটি অ্যারে বা একটি মান যদি কর্মক্ষমতা সঙ্গে মান পরীক্ষা সঙ্গে, দ্বিতীয় পদ্ধতি একটি বৈধ দ্রুত পদ্ধতির মত দেখায়। এটি Chrome এর 'উদাহরণস্বরূপ' এর থেকে আরও দ্রুত, ইন্টারনেট এক্সপ্লোরার, অপেরা এবং সাফারি (আমার মেশিনে) এর দ্বিতীয় সেরা পদ্ধতির চেয়ে দ্বিগুণ দ্রুত।


আমি প্রথমে আপনার বাস্তবায়ন সমর্থন করে isArray :

if (Array.isArray)
    return Array.isArray(v);

আপনি instanceof অপারেটর ব্যবহার করে চেষ্টা করতে পারে

v instanceof Array

এই চেক করতে সহজ ফাংশন:

function isArray(object)
{
    if (object.constructor === Array) return true;
    else return false;
}

এই ফাংশন একটি অ্যারের মধ্যে প্রায় কিছু চালু হবে:

function arr(x) {
    if(x === null || x === undefined) {
        return [];
    }
    if(Array.isArray(x)) {
        return x;
    }
    if(isString(x) || isNumber(x)) {
        return [x];
    }
    if(x[Symbol.iterator] !== undefined || x.length !== undefined) {
        return Array.from(x);
    }
    return [x];
}

function isString(x) {
    return Object.prototype.toString.call(x) === "[object String]"
}

function isNumber(x) {
    return Object.prototype.toString.call(x) === "[object Number]"
}

এটি কিছু নতুন ব্রাউজার বৈশিষ্ট্যগুলি ব্যবহার করে যাতে আপনি সর্বাধিক সহায়তার জন্য এটি পলিফিল করতে পারেন।

উদাহরণ:

> arr(null);
[]
> arr(undefined)
[]
> arr(3.14)
[ 3.14 ]
> arr(1/0)
[ Infinity ]
> gen = function*() { yield 1; yield 2; yield 3; }
[Function: gen]
> arr(gen())
[ 1, 2, 3 ]
> arr([4,5,6])
[ 4, 5, 6 ]
> arr("foo")
[ 'foo' ]

NB স্ট্রিংগুলির পরিবর্তে অক্ষরের অ্যারের পরিবর্তে একটি একক উপাদান সহ একটি অ্যারে রূপান্তরিত করা হবে। isString চেক মুছুন যদি আপনি এটি প্রায় অন্য উপায় পছন্দ করেন।

আমি এখানে Array.isArray ব্যবহার করেছি কারণ এটি সবচেয়ে শক্তিশালী এবং সহজতর।


একটি ইনপুট মান একটি অ্যারে যদি পরীক্ষা করার জন্য একটি সহজ ফাংশন নিম্নলিখিত:

function isArray(value)
{
  return Object.prototype.toString.call(value) === '[object Array]';
}

এটি ক্রস ব্রাউজার এবং পুরানো ব্রাউজারগুলির সাথে কাজ করে। এটি টিজে ক্রাউডার্স ব্লগ পোস্ট থেকে টানা হয়


এখানে এমডিএন বলেছে:

অ্যারে থেকে নিয়মিত বস্তু আলাদা করার জন্য Array.isArray বা Object.prototype.toString.call ব্যবহার করুন

এটার মত:

  • Object.prototype.toString.call(arr) === '[object Array]' , অথবা

  • Array.isArray(arr)


এটি সমস্ত পদ্ধতির মধ্যে দ্রুততম (সমস্ত ব্রাউজার সমর্থিত):

function isArray(obj){
    return !!obj && obj.constructor === Array;
}

যদি এই ফাংশনে পাস করা দুটি মানের মান স্ট্রিং বা স্ট্রিংগুলির অ্যারে থাকে তবে এটি সহজ রাখুন এবং স্ট্রিং সম্ভাবনার জন্য একটি typeof চেক ব্যবহার করুন:

function someFunc(arg) {
    var arr = (typeof arg == "string") ? [arg] : arg;
}

স্টোয়ান স্টেফানোভের বই জাভাস্ক্রিপ্ট প্যাটার্নস- এ একটি চমৎকার উদাহরণ রয়েছে যা সমস্ত সম্ভাব্য সমস্যাগুলি পরিচালনা করে এবং ECMAScript 5 পদ্ধতি Array.isArray () ব্যবহার করে বলে মনে করে

তাই এখানে এটি হল:

if (typeof Array.isArray === "undefined") {
    Array.isArray = function (arg) {
        return Object.prototype.toString.call(arg) === "[object Array]";
    };
}

যাইহোক, যদি আপনি jQuery ব্যবহার করছেন, তবে আপনি এটির পদ্ধতি $.isArray() ব্যবহার করতে পারেন


এই উত্তরটি বিবেচনায় এই উত্তরটি উন্নত করার আমার প্রচেষ্টা:

var isArray = myArray && myArray.constructor === Array;

এটি যদি / অন্য থেকে পরিত্রাণ পায়, এবং অ্যারের সম্ভাব্যতা বা অনির্ধারিত হওয়ার সম্ভাবনা থাকে


A = [1,2,3]
console.log(A.map==[].map)

এখানে সংক্ষিপ্ততম সংস্করণ অনুসন্ধানের জন্য আমি এতদূর পেয়েছি।

নোট, কোন নিখুঁত ফাংশন যা সবসময় সব সম্ভাব্য সমন্বয় সনাক্ত করবে। একটি যাদু সরঞ্জাম আশা তুলনায় আপনার সরঞ্জাম সব ক্ষমতা এবং সীমাবদ্ধতা জানতে ভাল।






arrays