অ্যারেতে অবজেক্টে রূপান্তর করুন


514

রূপান্তর করার সর্বোত্তম উপায় কী:

['a','b','c']

প্রতি:

{
  0: 'a',
  1: 'b',
  2: 'c'
}

3
কিছু কিছু হাঁস-টাইপিং কোডের জন্য তাঁর যা প্রয়োজন তা সম্ভবত এটি কোনও অ্যারে উদাহরণ হিসাবে না মনে করা উচিত
পয়েন্টি

6
তার মূল্য যে ইশারা জাভাস্ক্রিপ্ট অ্যারে হয় বস্তু।
স্পডলি

অন্য কেউ যদি লোডাশ সমাধানের সন্ধান করে তবে _.keyBy(পূর্বে _.indexBy) বিবেচনা করুন : লড্যাশ
ডকস

এটি কিছুটা বিভ্রান্তিকর কারণ অ্যারেগুলি ইতিমধ্যে বস্তু, তবে আমি অনুমান করি যে বিন্দুটি অ্যারের বহিরাগত বস্তুকে একটি সাধারণ বস্তুতে রূপান্তরিত করছে ।
ওরিওল

1
লোডাশের সাথে এটি করার একটি সহজ উপায় _.toPlainObject। প্রাক্তন:var myObj = _.toPlainObject(myArr)
জুলিয়ান সোরো

উত্তর:


472

ইসমাস্ক্রিপ্ট poly সহজেই পলিফিলযোগ্য পরিচয় করিয়ে দেয় Object.assign:

Object.assign()পদ্ধতি একটি লক্ষ্য বস্তু এক বা একাধিক উৎস বস্তু থেকে সব গণনীয় নিজের বৈশিষ্ট্য মান কপি করতে ব্যবহৃত হয়। এটি লক্ষ্য বস্তুটি ফিরিয়ে দেবে।

Object.assign({}, ['a','b','c']); // {0:"a", 1:"b", 2:"c"}

lengthঅ্যারের নিজস্ব সম্পত্তি অনুলিপি করা হয়নি কারণ এটি গণনাযোগ্য নয়।

এছাড়াও, আপনি একই ফলাফল অর্জন করতে ES6 স্প্রেড সিনট্যাক্স ব্যবহার করতে পারেন :

{ ...['a', 'b', 'c'] }

কেবলমাত্র উল্লেখ করতে চাই - যদি আপনার কাছে ইতিমধ্যে মূল অবজেক্ট থেকে বাছাই করা বৈশিষ্ট্যের একটি অ্যারে থাকে, স্প্রেড অপারেটর ব্যবহার করে সেই অ্যারেটি সরাসরি নতুন বস্তুতে পরিণত করবে:{ ...[sortedArray]}
হ্যাপিহ্যান্ডস 31

ওরিওল, 0 এবং 1 এর পরিবর্তে কোনও স্থির কী সেট করার কোনও উপায় আছে?
মেনাই আলা এডডাইন

488

এর মতো একটি ফাংশন সহ:

function toObject(arr) {
  var rv = {};
  for (var i = 0; i < arr.length; ++i)
    rv[i] = arr[i];
  return rv;
}

আপনার অ্যারে ইতিমধ্যে কম-বেশি বা কেবল মাত্র একটি অবজেক্ট, তবে অ্যারেগুলিতে পূর্ণসংখ্যার নামযুক্ত বৈশিষ্ট্যগুলির সাথে কিছু "আকর্ষণীয়" এবং বিশেষ আচরণ রয়েছে। উপরেরটি আপনাকে একটি সরল বস্তু দেবে।

ওহ সম্পাদনাও আপনি অ্যারেতে "গর্ত" হিসাবে অ্যাকাউন্ট করতে চাইতে পারেন:

function toObject(arr) {
  var rv = {};
  for (var i = 0; i < arr.length; ++i)
    if (arr[i] !== undefined) rv[i] = arr[i];
  return rv;
}

আধুনিক জাভাস্ক্রিপ্ট রানটাইমগুলিতে আপনি এই .reduce()পদ্ধতিটি ব্যবহার করতে পারেন :

var obj = arr.reduce(function(acc, cur, i) {
  acc[i] = cur;
  return acc;
}, {});

এটির একটি অ্যারেতে "গর্ত" এড়িয়ে যায়, কারণ এটি কিভাবে .reduce()কাজ করে।


2
@ m93a এটি ইতিমধ্যে একটি অবজেক্ট। জাভাস্ক্রিপ্টে, []আপনি যদি সংখ্যার সম্পত্তি কী এবং "দৈর্ঘ্য" বৈশিষ্ট্যটি ব্যবহার না করে থাকেন তবে সত্যিই অ্যারে উদাহরণ তৈরি করার কোনও অর্থ নেই ।
পয়েন্টি

14
পুনরায় const obj = arr.reduce((obj, cur, i) => { return { ...obj, [i]: cur }; }, {});
নিযুক্তি

3
তীর + ডিস্ট্রাকচারিং সিনট্যাক্স ডাব্লু / ও স্পষ্ট প্রত্যাবর্তন:const obj = arr.reduce((obj, cur, i) => ({ ...obj, [i]: cur }), {});
মার্ক শিবিব

2
@ ইউজিন_সুনিক সত্যই, তবে ২০১০-এ যখন আমি এর উত্তর দিয়েছিলাম তখন সেই পদ্ধতির উপস্থিতি ছিল না :)
পয়েন্টি

2
@ এমিরো যেমন উল্লেখ করেছেন, প্রতিবার একটি নতুন অবজেক্ট তৈরি করা প্রয়োজনীয় নয় এবং বাস্তবে যে প্রাথমিক বস্তুটি তৈরি হয়েছিল তা চালনার চেয়ে ধীর গতিতে । 1000 টি উপাদানের অ্যারেতে জেএসপিফারফ পরীক্ষা চালানো, প্রতিবার একটি নতুন অবজেক্ট তৈরি করা বিদ্যমান অবজেক্টটির পরিবর্তনের চেয়ে 1000 গুণ কম ধীর। jsperf.com/…
রোমেলেম

281

আপনি একটি সঞ্চালক ওরফে ব্যবহার করতে পারেন reduce

['a','b','c'].reduce(function(result, item, index, array) {
  result[index] = item; //a, b, c
  return result;
}, {}) //watch out the empty {}, which is passed as "result"

{}শুরুর পয়েন্ট হিসাবে খালি বস্তুটি পাস করুন ; তারপরে ক্রমবর্ধমানভাবে সেই বস্তুটিকে "বৃদ্ধি" করুন। পুনরাবৃত্তি শেষে, resultহবে{"0": "a", "1": "b", "2": "c"}

যদি আপনার অ্যারে কী-মান জোড়ের অবজেক্টগুলির একটি সেট হয়:

[{ a: 1},{ b: 2},{ c: 3}].reduce(function(result, item) {
  var key = Object.keys(item)[0]; //first property: a, b, c
  result[key] = item[key];
  return result;
}, {});

উত্পাদন করবে: {a: 1, b: 2, c: 3}

সম্পূর্ণতার স্বার্থে, reduceRightআপনাকে বিপরীত ক্রমে আপনার অ্যারের উপরে পুনরাবৃত্তি করতে দেয়:

[{ a: 1},{ b: 2},{ c: 3}].reduceRight(/* same implementation as above */)

উত্পাদন করবে: {c:3, b:2, a:1}

আপনার সঞ্চারক আপনার নির্দিষ্ট উদ্দেশ্যে কোনও ধরণের হতে পারে। উদাহরণস্বরূপ একটি অ্যারেতে আপনার অবজেক্টের কী এবং মানটি অদলবদল করতে, পাস করুন []:

[{ a: 1},{ b: 2},{ c: 3}].reduce(function(result, item, index) {
  var key = Object.keys(item)[0]; //first property: a, b, c
  var value = item[key];
  var obj = {};
  obj[value] = key;
  result.push(obj);
  return result;
}, []); //an empty array

উত্পাদন করবে: [{1: "a"}, {2: "b"}, {3: "c"}]

বিপরীতে map, reduce1-1 ম্যাপিং হিসাবে ব্যবহৃত হতে পারে না। আপনি যে আইটেমগুলি অন্তর্ভুক্ত করতে বা বাদ দিতে চান তার উপর আপনার সম্পূর্ণ নিয়ন্ত্রণ রয়েছে। অতএব reduceআপনাকে filterযা করতে পারে তা অর্জন করতে সহায়তা করে যা reduceখুব বহুমুখী করে তোলে :

[{ a: 1},{ b: 2},{ c: 3}].reduce(function(result, item, index) {
  if(index !== 0) { //skip the first item
    result.push(item);
  }
  return result;
}, []); //an empty array

উত্পাদন করবে: [{2: "b"}, {3: "c"}]

সতর্কতা : reduceএবং Object.keyএর অংশ ECMA 5th edition; আপনার ব্রাউজারগুলির জন্য এমন একটি পলিফিল সরবরাহ করা উচিত যা তাদের সমর্থন করে না (উল্লেখযোগ্যভাবে IE8)।

মজিলার একটি ডিফল্ট বাস্তবায়ন দেখুন ।


1
আপনি যখন কোনও বস্তুর মানচিত্র ব্যবহার করছেন তখন একটি রেডুক্স স্টোর রক্ষণাবেক্ষণে সহায়ক এবং আপনার কীগুলির মধ্যে একটি ফেলে দিতে হবে
ধ্রুবপ্যাটেল

101

আপনি যদি jquery ব্যবহার করছেন:

$.extend({}, ['a', 'b', 'c']);

4
অদ্ভুত, যদি আমি একটি অ্যারে পরিবর্তনশীল দেয় তবে এটি প্রতিটি অক্ষরকে একটি পৃথক বস্তুর মধ্যে রাখে: 0: "এ", 1: ",", 2: "বি" ... সুতরাং এটি উদ্ধৃতিগুলি উপেক্ষা করে, তবে কমাগুলি অন্তর্ভুক্ত করে .. ।
ট্রাইস্পেস

@ ম্যাক্স আমি মনে করি এরকম কোনও আচরণ নেই। ফিরে অবজেক্ট {0: 'a', 1: 'b', 2: 'c'}প্রত্যাশিত ফল কি।
ivkremer

3
অ-সংখ্যাসূচক পদ্ধতিতে কীগুলি অবহিত করার সময় ex। প্রসারিত করার কোনও উপায় আছে, যেমন: অ্যারে আইটেমগুলিতে গণনা করা?
ডেভি লিমা

সুপার অসাধারণ এবং সংক্ষিপ্ত পরীক্ষা
ফয়সাল মেহমুদ আওয়ান

63

সম্পূর্ণতার জন্য, ECMAScript 2015 (ES6) ছড়িয়ে পড়ে। হয় ট্রান্সপ্লেলার (বাবেল) অথবা কমপক্ষে ES6 চলমান পরিবেশের প্রয়োজন হবে।

console.log(
   { ...['a', 'b', 'c'] }
)


2
বাস্তবে এটি ES2015 তে স্থানীয়ভাবে উপলব্ধ নয় isn't এটি তবে খুব মার্জিত।
আলুয়ান হাদ্দাদ

47

আমি সম্ভবত এটি লিখতাম (যেহেতু খুব কমই আমি হাতে আন্ডারস্কোর লাইব্রেরি থাকব না):

var _ = require('underscore');

var a = [ 'a', 'b', 'c' ];
var obj = _.extend({}, a);
console.log(obj);
// prints { '0': 'a', '1': 'b', '2': 'c' }

9
আপনি আমার প্রতিক্রিয়া হ্রাস, কিন্তু কোন মন্তব্য? আমার উত্তরটি সঠিক এবং পরীক্ষিত। আপত্তি কী?
ডেভ ডপসন

14
এই প্রশ্নের কোনও আন্ডারস্কোর ট্যাগ নেই এবং আপনি নোড.জেএস বা একটি প্রয়োজনীয় লাইব্রেরিও ধরে নিচ্ছেন।
ডেভিড হেলসিং

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

6
তবুও, আপনি যদি আনসারস্কোর ব্যবহার করছেন তবে একটি সাধারণ obj=_.extend({},a);কাজটি করবে। এছাড়াও, আপনি যদি অ্যারেগুলির মাধ্যমে পুনরাবৃত্তি করেন তবে আমি বলতে চাই যে এটির _.eachচেয়ে আরও উপযুক্ত _.map। সব মিলিয়ে বেশ কয়েকটি স্তরে এটি ভাল উত্তর নয়।
ডেভিড হেলসিং

4
আন্ডারস্কোর বা লো-ড্যাশ উল্লেখ না করে "আপনার অবশ্যই উত্তর দিতে হবে" লোকেরা এত বিরক্তিকর। তুলনীয় যে আপনাকে স্ট্যান্ডার্ড লাইব্রেরির উল্লেখ না করে সি ++ প্রশ্নের উত্তর দিতে হবে। যদি আন্ডারস্কোর বা লো-ড্যাশ কোনও বিকল্প না হয় তবে ওপিতে এটি উল্লেখ করা উচিত।
চার্লি মার্টিন

26

কেবলমাত্র সম্পূর্ণতার জন্য এখানে একটি ও (1) ES2015 পদ্ধতি রয়েছে।

var arr = [1, 2, 3, 4, 5]; // array, already an object
Object.setPrototypeOf(arr, Object.prototype); // now no longer an array, still an object

(1) এমডিএন অনুসারে , কোনও বস্তুর [[প্রোটোটাইপ]] পরিবর্তন করা খুব ধীর গতি সম্পন্ন অপারেশন। (২) এটি নিজস্ব lengthসম্পত্তি সরিয়ে দেয় না । (3) অবজেক্টটি এখনও একটি অ্যারে Array.isArray(arr) === true,। (4) বিশেষ অ্যারে আচরণগুলি সরানো হয় না, যেমন arr.length = 0সমস্ত সূচকগুলি সরিয়ে দেয়। (5) অতএব, আমি মনে করি Object.assignঅনেক ভালো
ওরিওল

1
@ অরিওল এমডিএন ভুল, কমপক্ষে ভি 8-তে (তবে অন্যান্য ইঞ্জিনগুলিও) এই বিশেষ ক্ষেত্রে এটি একটি দ্রুত দ্রুত অপারেশন - যেহেতু বস্তুর একটি সংখ্যাযুক্ত স্টোর রয়েছে তবে এটি মূলত দুটি পয়েন্টার পরিবর্তন করছে।
বেনিয়ামিন গ্রুইনবাউম

এটি অন্যান্য দ্রুত সমাধানগুলির মধ্যে এটি বাহ্যিকভাবে কোনও অ-সূচক ("নিজস্ব") বৈশিষ্ট্য সংরক্ষণের (যেমন, ধনাত্মক-পূর্ণসংখ্যার বৈশিষ্ট্য) সংরক্ষণ করার ক্ষেত্রেও স্পষ্টতই অনন্য বলে ব্যবহার করা যেতে পারে ...
ব্রেট জামির

তবে হুম, এখানে "অবজেক্ট" এর জন্য Array.isArrayফিরে আসছে trueযদিও instanceof Arrayনা ...
ব্রেট জামির

@ ব্র্যাটজামির যা বাগের মতো শোনাচ্ছে: ডি
বেনজামিন গ্রুয়েনবুম

26

না দেখে অবাক -

console.log(
  Object.assign({}, ['a', 'b', 'c'])
)


{ "first":"a", "second":"b","third":"c" }কীগুলি ঠিক করার সাথে সাথে তৈরি করার জন্য যে কোনও স্মার্ট পরামর্শ - আমি একটি ধ্বংসের সন্ধান করছি
এমপি্লুঞ্জন

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

আমার আজ আর একটি মামলা হয়েছিল। : আমি এটা সম্পর্কে একটি প্রশ্ন জিজ্ঞাসা শেষ পর্যন্ত stackoverflow.com/questions/62197270/destruct-using-titles/...
mplungjan

23

আমরা অ্যারেটিকে অবজেক্টে রূপান্তর করতে ব্যবহার করতে পারি Object.assignএবং array.reduceফাংশন করতে পারি।

var arr = [{a:{b:1}},{c:{d:2}}] 
var newObj = arr.reduce((a, b) => Object.assign(a, b), {})

console.log(newObj)


এই আমি খুঁজছিলাম ছিল। আমার অভ্যাসের দরকার নেই, অ্যারেটিকে ধরে রাখা কী-মান জোড়ায় রূপান্তর করা দরকার।
মাইকে কে

18

আমি অবজেক্ট স্প্রেড অপারেটরটি ব্যবহার করে শেষ করেছি, যেহেতু এটি ECMAScript 2015 (ES6) মানের অংশ of

const array = ['a', 'b', 'c'];
console.log({...array});
// it outputs {0:'a', 1:'b', 2:'c'}

নিম্নলিখিত মেড বেহালার একটি উদাহরণ হিসাবে।


1
আমি এর পারফরম্যান্স সম্পর্কে নিশ্চিত নই, তবে অনেকগুলি অ্যারে থেকে অবজেক্ট রূপান্তরকরণের মধ্যে (যেহেতু আমি আমার সমস্ত কোডগুলির মানকে মানক হিসাবে ব্যবহার করতে চাই) এটি সম্ভবত সবচেয়ে সহজ।
কেউ বিশেষ

ইতিমধ্যে বিদ্যমান উত্তরগুলির তুলনায় এটি কীভাবে ভাল যা একই সমাধান দেয়?
ড্যান ড্যাসকলেসকু

17
Object.assign({}, ['one', 'two']); // {0: 'one', 1: 'two'}

আধুনিক জাভাস্ক্রিপ্টে সহজ উপায় হ'ল এটি ব্যবহার করা Object.assign()যা কী অনুলিপি করা ছাড়া আর কিছুই করে না: একটি বস্তু থেকে অন্য বস্তুর কাছে মান। আমাদের ক্ষেত্রে, Arrayনতুনকে সম্পত্তি দান করে {}


ইতিমধ্যে বিদ্যমান উত্তরগুলির তুলনায় এটি কীভাবে ভাল যা একই সমাধান দেয়?
ড্যান ড্যাসকলেসকু

ড্যান ড্যাসক্লেস্কু সময়ে আমি উত্তর যুক্ত করেছি কেবলমাত্র সম্পর্কিত উপরের উত্তর O.assignছিল তবে এর ব্যাখ্যাটির অভাব রয়েছে। আজকাল অবজেক্টে অ্যারের বিন্যাস করা একটি উপায় ( {...array})
অ্যাপিওরন

13

ES2016 এর জন্য, অবজেক্টগুলির জন্য স্প্রেড অপারেটর। দ্রষ্টব্য: এটি ES6 এর পরে এবং তাই ট্রান্সপেলারটি সামঞ্জস্য করতে হবে।

const arr = ['a', 'b', 'c'];
const obj = {...arr}; // -> {0: "a", 1: "b", 2: "c"} 


স্প্রেড অপারেটরের উত্তর ইতিমধ্যে 2 বছর আগে দেওয়া হয়েছিল
ড্যান ড্যাসকলেসকু


10

একটি ব্যবহার করে javascript#forEachএটি করা যায়

var result = {},
    attributes = ['a', 'b','c'];

attributes.forEach(function(prop,index) {
  result[index] = prop;
});

ইসিএমএ 6 সহ:

attributes.forEach((prop,index)=>result[index] = prop);

10

FWIW, একে অন্যকে সাম্প্রতিক পদ্ধতির নতুন ব্যবহার করা Object.fromEntriesসহ Object.entriesনিম্নরূপ:

const arr = ['a','b','c'];
arr[-2] = 'd';
arr.hello = 'e';
arr.length = 17;
const obj = Object.fromEntries(Object.entries(arr));

... যা বিচ্ছিন্ন অ্যারে আইটেমগুলিকে undefinedবা nullঅন-সূচক হিসাবে সংরক্ষণ করে (যেমন, ধনাত্মক-পূর্ণসংখ্যার / অ-সংখ্যাযুক্ত) কীগুলি সংরক্ষণ করে।

কেউ যোগ করতে ইচ্ছুক হতে পারে arr.length, তবে এটি অন্তর্ভুক্ত নেই:

obj.length = arr.length;


9

আপনি যদি ES6 ব্যবহার করছেন তবে আপনি অবজেক্ট.সেসাইন এবং স্প্রেড অপারেটর ব্যবহার করতে পারেন

{ ...['a', 'b', 'c'] }

আপনি যদি অ্যারে নেস্টেড থাকে

var arr=[[1,2,3,4]]
Object.assign(...arr.map(d => ({[d[0]]: d[1]})))

1
কেবলমাত্র আপনার পরিবর্তনশীল নামগুলি আলাদা নয়, তবে আপনার উদাহরণটি কার্যকর হবে না, প্রাথমিকভাবে কনস্ট্রাক্টর থেকে একটি মানচিত্র তৈরি করতে 2 ডি কী-মান অ্যারের প্রয়োজন। new Map([['key1', 'value1'], ['key2', 'value2']]);
শ্যানন হচকিন্স

5

একটি দ্রুত এবং নোংরা:

var obj = {},
  arr = ['a','b','c'],
  l = arr.length; 

while( l && (obj[--l] = arr.pop() ) ){};

আমি মনে করি আপনি এটি পরীক্ষা করতে ভুলে গেছেন; এটি উত্পাদন করে {0:"c", 1:"b", 2:"a"}। আপনি হয় unshiftবদলে চান pop(বা আরও ভাল) দিয়ে শুরু করতে i=arr.length-1এবং পরিবর্তে হ্রাস।
ফ্রেগজ

হ্যাঁ .. সবেমাত্র এটি পরিবর্তন হয়েছে, তবে তারপরে এটি কম আকর্ষণীয় হয়ে ওঠে: /
মাইক

এমনকি করতে পারে l = arr.lengthএবং তারপরেও while (l && (obj[--l] = arr.pop())){}(আমি বুঝতে পেরেছি এটি পুরানো, তবে কেন এটি আরও সহজ করে তুলবেন না)।
কিউস - মনিকার

2
@ কিউস, সুন্দর সংক্ষিপ্তকরণ
মাইক

4

দ্রুত এবং নোংরা # 2:

var i = 0
  , s = {}
  , a = ['A', 'B', 'C'];

while( a[i] ) { s[i] = a[i++] };

আপনি কেন কমা স্বরলিপি ব্যবহার করছেন?
কনার রুহল

3
পরের লাইনে কমা নেতৃত্ব দেওয়ার জন্য ব্যক্তিগত পছন্দ। আমি এই স্বরলিপি পড়া সহজ মনে করি।
বিন্জবয়

1
অ্যারেটিতে মিথ্যা মান থাকলে লুপটি থামবে। i < a.lengthপরিবর্তে আপনার চেক করা উচিত a[i]
ওরিওল


3

এখানে আমি স্রেফ লিখেছি এমন একটি পুনরাবৃত্ত ফাংশন। এটি সহজ এবং ভালভাবে কাজ করে।

// Convert array to object
var convArrToObj = function(array){
    var thisEleObj = new Object();
    if(typeof array == "object"){
        for(var i in array){
            var thisEle = convArrToObj(array[i]);
            thisEleObj[i] = thisEle;
        }
    }else {
        thisEleObj = array;
    }
    return thisEleObj;
}

এখানে একটি উদাহরণ দেওয়া হয়েছে ( জেএসফিডাল ):

var array = new Array();
array.a = 123;
array.b = 234;
array.c = 345;
var array2 = new Array();
array2.a = 321;
array2.b = 432;
array2.c = 543;
var array3 = new Array();
array3.a = 132;
array3.b = 243;
array3.c = 354;
var array4 = new Array();
array4.a = 312;
array4.b = 423;
array4.c = 534;
var array5 = new Array();
array5.a = 112;
array5.b = 223;
array5.c = 334;

array.d = array2;
array4.d = array5;
array3.d = array4;
array.e = array3;


console.log(array);

// Convert array to object
var convArrToObj = function(array){
    var thisEleObj = new Object();
    if(typeof array == "object"){
        for(var i in array){
            var thisEle = convArrToObj(array[i]);
            thisEleObj[i] = thisEle;
        }
    }else {
        thisEleObj = array;
    }
    return thisEleObj;
}
console.log(convArrToObj(array));

ফলাফল: আপত্তি করতে পুনরাবৃত্তির অ্যারে


সত্যিই ভাল কাজ করে। ধন্যবাদ
হনমাসলাহ

এটি আপনার উচ্চতর হওয়া উচিত, যদি আপনার কাছে থাকে ['a' = '1', 'b' = '2', 'c' = '3']এবং এটি পছন্দ {a: 1, b: 2, c: 3}করে তবে এটি নিখুঁত কাজ করে।
ওয়াঞ্জিয়া

3
.reduce((o,v,i)=>(o[i]=v,o), {})

[ডক্স]

বা আরও ভার্জোজ

var trAr2Obj = function (arr) {return arr.reduce((o,v,i)=>(o[i]=v,o), {});}

অথবা

var transposeAr2Obj = arr=>arr.reduce((o,v,i)=>(o[i]=v,o), {})

ভ্যানিলা জেএস সহ সংক্ষিপ্ততম এক

JSON.stringify([["a", "X"], ["b", "Y"]].reduce((o,v,i)=>{return o[i]=v,o}, {}))
=> "{"0":["a","X"],"1":["b","Y"]}"

আরও কিছু জটিল উদাহরণ

[["a", "X"], ["b", "Y"]].reduce((o,v,i)=>{return o[v[0]]=v.slice(1)[0],o}, {})
=> Object {a: "X", b: "Y"}

আরও ছোট ( function(e) {console.log(e); return e;}=== ব্যবহার করে (e)=>(console.log(e),e))

 nodejs
> [[1, 2, 3], [3,4,5]].reduce((o,v,i)=>(o[v[0]]=v.slice(1),o), {})
{ '1': [ 2, 3 ], '3': [ 4, 5 ] }

[/ ডক্স]


তুমি কী দিয়েছ [/docs]? কোড স্নিপেটগুলি কার্যকর করার জন্য এটি আরও কার্যকর হবে।
ড্যান ড্যাসকলেসকু

3

আমি সহজভাবে এটি করতে হবে Array.of()অ্যারে এর কনস্ট্রাক্টর হিসাবে প্রসঙ্গটি ব্যবহার করার ক্ষমতা রয়েছে।

দ্রষ্টব্য 2 ফাংশনটি ইচ্ছাকৃত জেনেরিক কারখানার পদ্ধতি; এটির প্রয়োজন হয় না যে এটির মানটি অ্যারে নির্মাণকারী হবে। সুতরাং এটি অন্য কনস্ট্রাক্টর দ্বারা স্থানান্তরিত বা উত্তরাধিকার সূত্রে প্রাপ্ত হতে পারে যা একক সংখ্যাসূচক যুক্তি দিয়ে ডাকতে পারে।

সুতরাং আমরা Array.of()কোনও ফাংশনে বাঁধতে পারি এবং অবজেক্টের মতো অ্যারে তৈরি করতে পারি ।

function dummy(){};
var thingy = Array.of.apply(dummy,[1,2,3,4]);
console.log(thingy);

Array.of() একটি ব্যবহার করে এমনকি অ্যারে উপ-শ্রেণিবদ্ধকরণ করতে পারেন


3

আপনি যদি ব্যবহার করতে পারেন Mapবা Object.assign, এটি খুব সহজ।

একটি অ্যারে তৈরি করুন:

const languages = ['css', 'javascript', 'php', 'html'];

নীচে কী হিসাবে সূচকযুক্ত একটি অবজেক্ট তৈরি করে:

Object.assign({}, languages)

উপরের মত মানচিত্র দিয়ে একই প্রতিলিপি

সূচক ভিত্তিক বস্তু {0 : 'css'}ইত্যাদিতে রূপান্তর করে ...

const indexMap = new Map(languages.map((name, i) => [i, name] ));
indexMap.get(1) // javascript

একটি মান ভিত্তিক অবজেক্ট {css : 'css is great'}ইত্যাদি রূপান্তর করুন ...

const valueMap = new Map(languages.map(name => [name, `${name} is great!`] ));
valueMap.get('css') // css is great

3

আইটেমের অ্যারেটিকে কোনও অবজেক্টে রূপান্তর করার একটি সহজ এবং কৌতুকপূর্ণ পদ্ধতি

function arrayToObject( srcArray ){
    return  JSON.parse( JSON.stringify( srcArray ) );
}

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

var p = [0,2,3,'pork','pie',6];
obj = new arrayToObject( p );
console.log( obj[3], obj[4] )
// expecting `pork pie`

আউটপুট:

pork pie

প্রকারটি পরীক্ষা করা হচ্ছে:

typeof obj
"object"

এবং প্রোটোটাইপ পদ্ধতি না থাকলে জিনিসগুলি সম্পূর্ণ হবে না

Array.prototype.toObject =function(){
    return  JSON.parse( JSON.stringify( this ) );
}

যেমন ব্যবহার করে:

var q = [0,2,3,'cheese','whizz',6];
obj = q.toObject();
console.log( obj[3], obj[4] )
// expecting `cheese whizz`

আউটপুট:

cheese whizz

* লক্ষ্য করুন যে নামকরণের কোনও রুটিন নেই, তাই যদি আপনি নির্দিষ্ট নাম রাখতে চান তবে আপনাকে নীচের বিদ্যমান পদ্ধতিগুলি ব্যবহার চালিয়ে যেতে হবে।


পুরানো পদ্ধতি

এটি আপনাকে যে ক্রমে আপনি চান সেটিকে নির্ধারণ করে এমন কীগুলির সাহায্যে একটি অ্যারে থেকে একটি অবজেক্ট তৈরি করতে দেয়।

Array.prototype.toObject = function(keys){
    var obj = {};
    var tmp = this; // we want the original array intact.
    if(keys.length == this.length){
        var c = this.length-1;
        while( c>=0 ){
            obj[ keys[ c ] ] = tmp[c];
            c--;
        }
    }
    return obj;
};

result = ["cheese","paint",14,8].toObject([0,"onion",4,99]);

console.log(">>> :" + result.onion); "পেইন্ট" আউটপুট দেবে, ফাংশনটির সমান দৈর্ঘ্যের অ্যারে থাকতে হবে বা আপনি একটি খালি বস্তু পাবেন।

এখানে একটি আপডেট পদ্ধতি

Array.prototype.toObject = function(keys){
    var obj = {};
    if( keys.length == this.length)
        while( keys.length )
            obj[ keys.pop() ] = this[ keys.length ];
    return obj;
};

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

না এটি হয় না, রুটিন অনুলিপি তৈরি করে, আসলটি স্পর্শ হয় না।
মার্ক গিবলিন

হ্যাঁ, আসলটি স্পর্শ করা হয়েছে। Jsfiddle.net/bRTv7 দেখুন । অ্যারে দৈর্ঘ্য উভয়ই 0 হয়
ব্রেট জামির

ঠিক আছে, আমি সম্পাদিত সংস্করণটি দিয়ে এটিকে সবেমাত্র পরিবর্তন করেছি অ্যারেগুলি ধ্বংস করে না, আশ্চর্যজনক যে এটি করা উচিত ছিল find
মার্ক গিবলিন

1
পুরানো ব্রাউজারগুলিতে সমর্থিত হওয়া আপডেট হওয়া পদ্ধতিটি যেমন JSON নতুন কোড বৈশিষ্ট্যগুলি ECMA যুক্ত করার চেয়ে বেশি সময় ধরে রয়েছে
মার্ক গিবলিন

2

let i = 0;
let myArray = ["first", "second", "third", "fourth"];

const arrayToObject = (arr) =>
    Object.assign({}, ...arr.map(item => ({[i++]: item})));

console.log(arrayToObject(myArray));

বা ব্যবহার

myArray = ["first", "second", "third", "fourth"]
console.log({...myArray})


2

ES5 - সমাধান:

ব্যবহার এরে প্রোটোটাইপ ফাংশন 'ধাক্কা' এবং 'প্রয়োগ' আপনি অ্যারে উপাদানের সঙ্গে বস্তুর পূরণ করতে পারেন।

var arr = ['a','b','c'];
var obj = new Object();
Array.prototype.push.apply(obj, arr);
console.log(obj);    // { '0': 'a', '1': 'b', '2': 'c', length: 3 }
console.log(obj[2]); // c


আমি যদি রূপান্তর করতে চাই তবে{ name: a, div :b, salary:c}
প্রশান্ত পিম্পলে

2

আরও ব্রাউজার সমর্থিত এবং এটি করার সহজতর উপায় যা সাধারণ লুপ ব্যবহার করে , এরকম কিছু:

const arr = ['a', 'b', 'c'],
obj = {};

for (let i=0; i<arr.length; i++) {
   obj[i] = arr[i];
}

তবে আধুনিক পদ্ধতিতে স্প্রেড অপারেটর ব্যবহার করা যেতে পারে , যেমন:

{...arr}

বা অবজেক্ট অ্যাসাইন :

Object.assign({}, ['a', 'b', 'c']);

উভয়ই ফিরে আসবে :

{0: "a", 1: "b", 2: "c"}

1

আপনি এই জাতীয় ফাংশন ব্যবহার করতে পারেন:

var toObject = function(array) {
    var o = {};
    for (var property in array) {
        if (String(property >>> 0) == property && property >>> 0 != 0xffffffff) {
            o[i] = array[i];
        }
    }
    return o;
};

এই একটিকে আরও দক্ষতার সাথে স্পার্স অ্যারে পরিচালনা করা উচিত।


1

এখানে একটি সমাধান coffeescript

arrayToObj = (arr) ->
  obj = {}
  for v,i in arr
    obj[i] = v if v?
  obj

7
কফিসক্রিপ্ট কি? আমরা জেএস নিয়ে কথা বলছি! : D
m93a

2
এটি একটি সামান্য ভাষা যা জাভাস্ক্রিপ্টে সংকলিত হয়েছে :)
ডেভিড

6
হ্যাম্প, এটি অদ্ভুত স্বরলিপি ব্যবহার করে। আমি আরও সাধারণ জেএস পছন্দ করি।
m93a

2
@ ডেভিড আপনি সম্পূর্ণ 1 টি লাইন তৈরি করতে 1 লাইনে লুপটি সম্পূর্ণ করতে পারেন do :) উদাহরণ:obj[i] = v for v,i in arr when v?
XåpplI'-I0llwlg'I -
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.