একটি জেএস বস্তুকে jQuery ব্যবহার করে একটি অ্যারেতে রূপান্তর করা


417

আমার অ্যাপ্লিকেশনটি নীচের মতো একটি জাভাস্ক্রিপ্ট অবজেক্ট তৈরি করে:

myObj= {1:[Array-Data], 2:[Array-Data]}

তবে অ্যারে হিসাবে আমার এই জিনিসটি দরকার।

array[1]:[Array-Data]
array[2]:[Array-Data]

সুতরাং আমি এই বস্তুকে একটি অ্যারেতে রূপান্তরিত করার চেষ্টা করেছি বস্তুর $.eachমাধ্যমে পুনরাবৃত্তি করে এবং উপাদানটিকে একটি অ্যারেতে যুক্ত করে:

x=[]
$.each(myObj, function(i,n) {
    x.push(n);});

কোনও বস্তুকে অ্যারে বা সম্ভবত কোনও ফাংশনে রূপান্তর করার জন্য আরও ভাল উপায় কি?


1
অ্যারে সূচকগুলি কি মূল বস্তুর কীগুলির মতো হওয়া উচিত? একটি অ্যারেতে প্রথম সূচক সর্বদা 0 থাকে তবে আপনার নিজস্ব কোড এবং সর্বাধিক উত্তর (স্বীকৃত এক সহ) এটিকে উপেক্ষা করে বলে মনে হয়; তবুও, আপনি আমার সম্পাদনাটিকে কাঙ্ক্ষিত উদাহরণের ফলাফলটিতে ফিরিয়ে দিয়েছেন।
ইম্রে

1
হ্যাঁ, আপনি ঠিক বলেছেন: প্রথম অ্যারে উপাদানটি 0 দিয়ে শুরু হয় তবে আমি আপনার সম্পাদনাটি উল্টিয়ে দিয়েছি, কারণ এই উদাহরণটি সম্ভব হিসাবে সহজ রাখা আমার চোখে সামঞ্জস্যপূর্ণ ছিল না, কারণ এতে পরিবর্তন myObj= {1:[Array-Data]করা myObj= {0:[Array-Data]আপনার সম্পাদনার অংশ ছিল না (যেমনটি আমি ঠিক মনে করি)
বান্ডার

3
JQuery ব্যবহার $ .makeArray (obj) যে জন্য কমান্ড api.jquery.com/jQuery.makeArray
DevlshOne

@ দেভলশান আপনার সরবরাহিত ডকুমেন্টেশনটি বলেছেন: "একটি জিকুয়েরি অবজেক্টটিকে একটি অ্যারেতে পরিণত করুন" আমি মনে করি না এটি ওপি প্রশ্নের সাথে খাপ খায়
অ্যালেক্স

উত্তর:


429
var myObj = {
    1: [1, 2, 3],
    2: [4, 5, 6]
};

var array = $.map(myObj, function(value, index) {
    return [value];
});


console.log(array);

আউটপুট:

[[1, 2, 3], [4, 5, 6]]

8
@ ডগবার্ট, দয়া করে আপনি ব্যাখ্যা করতে পারেন $.map? আমি যা করতে চেষ্টা করি প্রতিটি অনুসন্ধান jQuery বা অ্যারে মানচিত্রের পদ্ধতিতে প্রচুর লিঙ্ক সন্ধান করে।
ক্র্যানটোক

21
ডি আহা! আমার মন্তব্য উপেক্ষা করুন। আমি এই প্রশ্নের jQuery ট্যাগ খেয়াল ছিল না।
ক্র্যানটোক

8
নতুন অ্যারেতে কীগুলি বজায় রাখার কোনও উপায় আছে? আমি যে ডাব্লুএইচএইচইএইচএইচএইচএইচএইচএইচএইচএইচআরএইচএইউএইচএইউএইচআরএল
টিডি_নিজ্বোয়ার

55
আপনি jQuery ছাড়াই এটি করতে পারেন: অবজেক্ট.কিজ (মাইবজেক্ট)। ম্যাপ (ফাংশন (ভাল) {রিটার্ন [ভাল];);
ক্রিস এরিকসন

3
@ টিডিএনজিবোয়ার হ্যাঁ, এর value.key = index; return [value];পরিবর্তে ব্যবহার করুনreturn [value];
সাইমন আর্নল্ড

742

আপনি যদি কার্যকরী পদ্ধতির সন্ধান করেন:

var obj = {1: 11, 2: 22};
var arr = Object.keys(obj).map(function (key) { return obj[key]; });

ফলাফল স্বরূপ:

[11, 22]

একটি ES6 তীর ফাংশন সঙ্গে একই:

Object.keys(obj).map(key => obj[key])

ES7 এর সাহায্যে আপনি Object.valuesপরিবর্তে ( আরও তথ্য ) ব্যবহার করতে পারবেন :

var arr = Object.values(obj);

বা যদি আপনি ইতিমধ্যে অ্যান্ডস্কোর / লো-ড্যাশ ব্যবহার করছেন:

var arr = _.values(obj)


3
শীর্ষ উত্তরের সাথে অসন্তুষ্ট, আমি এই প্রায় সঠিক ফাংশনটি লিখেছি, উত্তর হিসাবে এটি পোস্ট করতে ফিরে এসেছি, স্ক্রোল করে নিলাম, দেখেছি 170. উপলব্ধি, মানুষ আমি ছেড়ে না দিলে আমাকে ভাবতে হবে না :) এই শীর্ষে থাকা উচিত। ওপি pls উত্তর হিসাবে নির্বাচন করুন।
j03m

1
যার জন্য এটি সুস্পষ্ট নয়, তার জন্য কীগুলি অনুক্রমিক হওয়ার দরকার নেই (উদাহরণস্বরূপ এগুলি 1 এবং 2 - তবে তারা ঠিক পাশাপাশি স্ট্রিং কী বা অ-অনুক্রমিক সংখ্যা হতে পারে
সাইমন_উইভার

কোডের প্রথম অনুচ্ছেদের জন্য আমি আধা কোলন অনুপস্থিত। নিশ্চিত কেন।
জনিবিজল

@ জোহনিবিজল আমার অনুমান যে আপনার লিটারে "রিটার্ন অবজেক্ট [কী]" লিখতে হবে; শেষে একটি সেমিকোলন দিয়ে। জাভাস্ক্রিপ্ট যদিও না।
জোয়েল রিচার্ড

30

আমি মনে করি আপনি ব্যবহার করতে পারবেন for inতবে সম্পত্তিটি নিষ্ক্রিয় নয় কিনা তা যাচাই করে নিচ্ছেন

myObj= {1:[Array-Data], 2:[Array-Data]}
var arr =[];
for( var i in myObj ) {
    if (myObj.hasOwnProperty(i)){
       arr.push(myObj[i]);
    }
}

সম্পাদনা করুন - আপনি যদি চান তবে আপনি নিজের অবজেক্টের সূচীগুলিও রাখতে পারেন, তবে আপনাকে সেগুলি সংখ্যাসূচক কিনা তা পরীক্ষা করে দেখতে হবে (এবং আপনি অনুপস্থিত সূচকগুলির জন্য অপরিজ্ঞাত মান পান:

function isNumber(n) {
  return !isNaN(parseFloat(n)) && isFinite(n);
}

myObj= {1:[1,2], 2:[3,4]}
var arr =[];
for( var i in myObj ) {
    if (myObj.hasOwnProperty(i)){
        if (isNumber(i)){
            arr[i] = myObj[i];
        }else{
          arr.push(myObj[i]);
        }
    }
}

1
আপনার কোডটি পরীক্ষা করা উচিত ছিল। $.mapচেপ্টা হবে Array-Data
মার্কো ডুমিক

আপনি ঠিক বলেছেন আমি এটি কোনও অ্যারে দিয়ে পরীক্ষা করিনি এবং মানচিত্রটি এটি চ্যাপ্টা করে! আমি উত্তরটি পরিবর্তন করেছি
নিকোলা পেলুচেটি

@ নিকোলা পেলুচেটি ma .মেকআরে () ভাল লাগছে, তবে আমি যা খুঁজছিলাম তা নয়, কারণ এটি কেবল বস্তুকে একটি অ্যারের উপাদানকে ফেলে দেয়: [{1:[Array-Data], 2:[Array-Data]}]এবং $.map()সফলও দেখায় না। এটি seams, যে সমস্ত উপ-অ্যারে ডেটা এক অ্যারে মার্জ করা হয়। array.length2 টি ফিরে আসবে (কারণ 2 উপাদান বিদ্যমান) তবে এটি 67 ফেরত দেয় যা সমস্ত ["অ্যারে-ডেটা"] এর সমস্ত উপাদানের সংখ্যা।
বেন্ডার

@ বেন্ডার আমি আরেকটি সমাধান পোস্ট করেছি, তবে আপনি ডগবার্টের পরামর্শ অনুযায়ী মানচিত্রটি ব্যবহার করতে পারেন
নিকোলা পেলুচেটি

আমি মনে করি মত আপনি স্পষ্টভাবে অ্যারের সূচক উল্লেখ করতে হবে ... arr[+i] = myObj[i];কারণ (ঝ) for(...in...)ওপি এর উদাহরণে কোন (২) অনুক্রমে আগমন বৈশিষ্ট্য নিশ্চিত করা হয় না সম্পত্তি, 1 থেকে শুরু করছেন না 0.
সালমানের

30

সহজভাবে কর

Object.values(obj);

এখানেই শেষ!


11
Object.values একটি ES2017 পদ্ধতি যা সাফারি, ইন্টারনেট, নোড 6. সমর্থিত নয়
ফিল Ricketts

25

আপনি যদি আপত্তি জানাতে সর্বাধিক সূচকটি জানেন তবে আপনি নিম্নলিখিতগুলি করতে পারেন:

var myObj = {
    1: ['c', 'd'],
    2: ['a', 'b']
  },
  myArr;

myObj.length = 3; //max index + 1
myArr = Array.prototype.slice.apply(myObj);
console.log(myArr); //[undefined, ['c', 'd'], ['a', 'b']]


1
কোডটি দৈর্ঘ্য নির্ধারণ করতে বা প্রকৃতপক্ষে এটিকে একটি অ্যারে হিসাবে তৈরি করার উদ্দেশ্যে যে কোডটি তৈরি করছে তার পক্ষে এটি আরও ভাল। আমি আশা করি না হয় এটি সম্ভব, তাই আমার জন্য এই উত্তরটি সহায়ক নয়।
ব্যবহারকারী2000095-টিম

myObj.length = Object.keys(myObj).length
টাল

19

যেহেতু ES5 অবজেক্ট.কিজ () সরাসরি কোনও বস্তুর উপরে সংজ্ঞায়িত বৈশিষ্ট্যযুক্ত একটি অ্যারে প্রদান করে (প্রোটোটাইপ শৃঙ্খলে সংজ্ঞাযুক্ত বৈশিষ্ট্যগুলি বাদ দিয়ে):

Object.keys(yourObject).map(function(key){ return yourObject[key] });

ES6 এটি তীর ফাংশন সহ আরও এক ধাপ এগিয়ে নিয়ে যায়:

Object.keys(yourObject).map(key => yourObject[key]);

1
বর্তমান ইএস 5 এর জন্য (যদিও আমি ইএস 6 উপভোগ করি): অবজেক্ট.কিজ (আপনারঅজেক্ট) .ম্যাপ (ফাংশন (কী) {আপনার অবজেক্ট [কী]}) ফিরিয়ে দিন);
ডেভিড জোরিচটা

18

আজকাল, এটি করার একটি সহজ উপায় রয়েছে: অবজেক্ট.ভ্যালু ()

var myObj = {
    1: [1, 2, 3],
    2: [4, 5, 6]
};

console.log(Object.values(myObj));

আউটপুট:

[[1, 2, 3], [4, 5, 6]]

এটি jQuery প্রয়োজন হয় না, এটি ECMAScript 2017 এ সংজ্ঞায়িত করা হয়েছে
It's এটি প্রতিটি আধুনিক ব্রাউজার দ্বারা সমর্থিত হয় (আইআই ভুলে যান)।


ভালো কিছু যদি আমি করি var state = { ingredient: { salad: 1, bacon: 1, } }এবং তারপর var HariOm = Object.values(state);দ্বারা অনুসরণ console.log(typeof HariOM)এটি একটি অবজেক্ট হিসেবে টাইপ প্রদর্শন করা হয়। এটি একটি অ্যারে হিসাবে প্রদর্শন করা উচিত নয়?
আইরোহিতভাটিয়া ২

এটি সম্পূর্ণ স্বাভাবিক, এখানে রেফারেন্সটি চেক করুন: বিকাশকারী.মোজিলা.আর.ইন.ইউএসArray.isArray(HariOM)
ডকস

16

সেরা পদ্ধতিটি জাভাস্ক্রিপ্ট-কেবলমাত্র ফাংশন ব্যবহার করা হবে:

var myArr = Array.prototype.slice.call(myObj, 0);

@ কিওয়ার্টি কোন ব্রাউজার?
টেস্ট 30

ক্রোম। পরীক্ষিতvar myObj = {1:[1,2,3],2:[4,5,6]};
কিউবার্টি

নোট করুন যে এই পদ্ধতিটি "অ্যারের মতো অবজেক্টস" রূপান্তর করার জন্য কাজ করে, যার অর্থ তাদের "দৈর্ঘ্য" সম্পত্তি এবং গণনা করা বৈশিষ্ট্য 0 থেকে শুরু হয়েছে counting সুতরাং @ কিওয়ারটির উদাহরণস্বরূপ কাজটি চেষ্টা করে দেখুন: {0: [1 , 2,3], 1: [4,5,6] দৈর্ঘ্য: 2} সূচকের মান এবং দৈর্ঘ্যের মানগুলির সাথে পরীক্ষা করুন, এটি সামান্য লেন্সিয়েন্ট। এখানে বিষয়ের একটি ভাল পঠন এখানে রয়েছে: nfriedly.com/techblog/2009/06/… "অ্যারের মতো অবজেক্টস" এ যান to
ম্যাট

15
x = [];
for( var i in myObj ) {
    x[i] = myObj[i];
}

10
আপনার ধাক্কা ব্যবহার করা উচিত, অন্যথায় আপনি একটি অবজেক্ট তৈরি শেষ করতে পারেন
নিকোলা পেলুচেটি

হতে পারে সূচকটি অন্তর্ভুক্ত করার জন্য এটি কিছু ভাল শক্তি force var bbb = {'1': 'a', '3': 'b'}; var x = []; for (var i in bbb) { x[parseInt(i)] = bbb[i];} console.log(x);
tres.14159


13

কেমন jQuery.makeArray(obj)

এইভাবে আমি আমার অ্যাপ্লিকেশনটিতে এটি করেছি।


2
এটি উপরের উদাহরণের জন্য [অবজেক্ট] প্রদান করে।
ক্রিস এরিকসন

1
কেবলমাত্র [0] সূচক যুক্ত করার বিষয় এবং আপনি আমার জীবন বাঁচিয়েছেন :)
রাহেল



3

Fiddle Demo

বজরেন্ডের উত্তরের বর্ধন

var myObj = {
    1: [1, [2], 3],
    2: [4, 5, [6]]
}, count = 0,
    i;
//count the JavaScript object length supporting IE < 9 also
for (i in myObj) {
    if (myObj.hasOwnProperty(i)) {
        count++;
    }
}
//count = Object.keys(myObj).length;// but not support IE < 9
myObj.length = count + 1; //max index + 1
myArr = Array.prototype.slice.apply(myObj);
console.log(myArr);


উল্লেখ

Array.prototype.slice ()

Function.prototype.apply ()

Object.prototype.hasOwnProperty ()

Object.keys ()


আমি ভুল হতে পারি, তবে মাইওবজিকে 0 থেকে শুরু করে গণনার চেয়ে আরও ভাল করা উচিত? অন্যটি কি, এটি আমার কাছে মনে হয় যে এখানে আমাদের একটি সমস্যা রয়েছে যেখানে আমাদের অ্যারে হবে: [অপরিজ্ঞাত, [1, [2], 3]] (প্রথম অংশটি অপরিজ্ঞাত কারণ এটি আমার অজব খুঁজে পায় না ['0'] এবং শেষ অংশটি MyObj ['2'] বের করা হচ্ছে কারণ দৈর্ঘ্যটি পড়ার পরে এটি MyObj ['1'] এ থামবে?
অ্যালেক্স ওয়ার্নার

2

আপনি যদি মান হিসাবে অবজেক্টের বৈশিষ্ট্যগুলির নাম রাখতে চান। উদাহরণ:

var fields = {
    Name: { type: 'string', maxLength: 50 },
    Age: { type: 'number', minValue: 0 }
}

ব্যবহার করুন Object.keys(), Array.map()এবং Object.assign():

var columns = Object.keys( fields ).map( p => Object.assign( fields[p], {field:p} ) )

ফলাফল:

[ { field: 'Name', type: 'string', maxLength: 50 }, 
  { field: 'Age', type: 'number', minValue: 0 } ]

ব্যাখ্যা:

Object.keys()উত্সের সমস্ত বৈশিষ্ট্য গণনা করে; প্রতিটি সম্পত্তিতে ফাংশন .map()প্রয়োগ করে =>এবং একটি অ্যারে প্রদান করে; Object.assign()প্রতিটি সম্পত্তির জন্য নাম এবং মান একত্রিত করে।


1

আমি একটি কাস্টম ফাংশন করেছি:

    Object.prototype.toArray=function(){
    var arr=new Array();
    for( var i in this ) {
        if (this.hasOwnProperty(i)){
            arr.push(this[i]);
        }
    }
    return arr;
};

0

কিছু পরীক্ষার পরে, এখানে অ্যারে ফাংশন রূপান্তরকারী একটি সাধারণ অবজেক্ট:

আপনার উদ্দেশ্য আছে:

var obj = {
    some_key_1: "some_value_1"
    some_key_2: "some_value_2"
};

কাজ:

function ObjectToArray(o)
{
    var k = Object.getOwnPropertyNames(o);
    var v = Object.values(o);

    var c = function(l)
    {
        this.k = [];
        this.v = [];
        this.length = l;
    };

    var r = new c(k.length);

    for (var i = 0; i < k.length; i++)
    {
        r.k[i] = k[i];
        r.v[i] = v[i];
    }

    return r;
}

ফাংশন ব্যবহার:

var arr = ObjectToArray(obj);

তুমি পাও:

arr {
    key: [
        "some_key_1",
        "some_key_2"
    ],
    value: [
        "some_value_1",
        "some_value_2"
    ],
    length: 2
}

সুতরাং আপনি সমস্ত কী এবং মানগুলিতে পৌঁছাতে পারেন যেমন:

for (var i = 0; i < arr.length; i++)
{
    console.log(arr.key[i] + " = " + arr.value[i]);
}

কনসোলে ফলাফল:

some_key_1 = some_value_1
some_key_2 = some_value_2

সম্পাদনা:

বা প্রোটোটাইপ আকারে:

Object.prototype.objectToArray = function()
{
    if (
        typeof this != 'object' ||
        typeof this.length != "undefined"
    ) {
        return false;
    }

    var k = Object.getOwnPropertyNames(this);
    var v = Object.values(this);

    var c = function(l)
    {
        this.k = [];
        this.v = [];
        this.length = l;
    };

    var r = new c(k.length);

    for (var i = 0; i < k.length; i++)
    {
        r.k[i] = k[i];
        r.v[i] = v[i];
    }

    return r;
};

এবং তারপরে ব্যবহার করুন:

console.log(obj.objectToArray);

0

আপনি এর থেকে রূপান্তর করতে একটি সহজ ফাংশন তৈরি করতে পারেন objectথেকে array, ভালো কিছু বিশুদ্ধ জাভাস্ক্রিপ্ট ব্যবহার করার জন্য কাজ করুন:

var objectToArray = function(obj) {
  var arr = [];
  if ('object' !== typeof obj || 'undefined' === typeof obj || Array.isArray(obj)) {
    return obj;
  } else {
    Object.keys(obj).map(x=>arr.push(obj[x]));
  }
  return arr;
};

বা এই এক:

var objectToArray = function(obj) {
  var arr =[];
  for(let o in obj) {
    if (obj.hasOwnProperty(o)) {
      arr.push(obj[o]);
    }
  }
  return arr;
};

এবং কল করুন এবং নীচের মত ফাংশনটি ব্যবহার করুন:

var obj = {1:'a', 2:'b', 3:'c', 4:'d', 5:'e'};
objectToArray(obj); // return ["a", "b", "c", "d", "e"]

ভবিষ্যতে আমাদের কাছে কিছু ডাকা হবে Object.values(obj), এর সমান Object.keys(obj)যা আপনার জন্য সমস্ত বৈশিষ্ট্য অ্যারে হিসাবে ফিরিয়ে দেবে, তবে এখনও অনেক ব্রাউজারে সমর্থিত নয় ...

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