রূপান্তর করার সর্বোত্তম উপায় কী:
['a','b','c']
প্রতি:
{
0: 'a',
1: 'b',
2: 'c'
}
_.toPlainObject
। প্রাক্তন:var myObj = _.toPlainObject(myArr)
রূপান্তর করার সর্বোত্তম উপায় কী:
['a','b','c']
প্রতি:
{
0: 'a',
1: 'b',
2: 'c'
}
_.toPlainObject
। প্রাক্তন:var myObj = _.toPlainObject(myArr)
উত্তর:
ইসমাস্ক্রিপ্ট poly সহজেই পলিফিলযোগ্য পরিচয় করিয়ে দেয় Object.assign
:
Object.assign()
পদ্ধতি একটি লক্ষ্য বস্তু এক বা একাধিক উৎস বস্তু থেকে সব গণনীয় নিজের বৈশিষ্ট্য মান কপি করতে ব্যবহৃত হয়। এটি লক্ষ্য বস্তুটি ফিরিয়ে দেবে।
Object.assign({}, ['a','b','c']); // {0:"a", 1:"b", 2:"c"}
length
অ্যারের নিজস্ব সম্পত্তি অনুলিপি করা হয়নি কারণ এটি গণনাযোগ্য নয়।
এছাড়াও, আপনি একই ফলাফল অর্জন করতে ES6 স্প্রেড সিনট্যাক্স ব্যবহার করতে পারেন :
{ ...['a', 'b', 'c'] }
{ ...[sortedArray]}
এর মতো একটি ফাংশন সহ:
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()
কাজ করে।
[]
আপনি যদি সংখ্যার সম্পত্তি কী এবং "দৈর্ঘ্য" বৈশিষ্ট্যটি ব্যবহার না করে থাকেন তবে সত্যিই অ্যারে উদাহরণ তৈরি করার কোনও অর্থ নেই ।
const obj = arr.reduce((obj, cur, i) => { return { ...obj, [i]: cur }; }, {});
const obj = arr.reduce((obj, cur, i) => ({ ...obj, [i]: cur }), {});
আপনি একটি সঞ্চালক ওরফে ব্যবহার করতে পারেন 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
, reduce
1-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)।
মজিলার একটি ডিফল্ট বাস্তবায়ন দেখুন ।
আপনি যদি jquery ব্যবহার করছেন:
$.extend({}, ['a', 'b', 'c']);
{0: 'a', 1: 'b', 2: 'c'}
প্রত্যাশিত ফল কি।
সম্পূর্ণতার জন্য, ECMAScript 2015 (ES6) ছড়িয়ে পড়ে। হয় ট্রান্সপ্লেলার (বাবেল) অথবা কমপক্ষে ES6 চলমান পরিবেশের প্রয়োজন হবে।
console.log(
{ ...['a', 'b', 'c'] }
)
আমি সম্ভবত এটি লিখতাম (যেহেতু খুব কমই আমি হাতে আন্ডারস্কোর লাইব্রেরি থাকব না):
var _ = require('underscore');
var a = [ 'a', 'b', 'c' ];
var obj = _.extend({}, a);
console.log(obj);
// prints { '0': 'a', '1': 'b', '2': 'c' }
obj=_.extend({},a);
কাজটি করবে। এছাড়াও, আপনি যদি অ্যারেগুলির মাধ্যমে পুনরাবৃত্তি করেন তবে আমি বলতে চাই যে এটির _.each
চেয়ে আরও উপযুক্ত _.map
। সব মিলিয়ে বেশ কয়েকটি স্তরে এটি ভাল উত্তর নয়।
কেবলমাত্র সম্পূর্ণতার জন্য এখানে একটি ও (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
length
সম্পত্তি সরিয়ে দেয় না । (3) অবজেক্টটি এখনও একটি অ্যারে Array.isArray(arr) === true
,। (4) বিশেষ অ্যারে আচরণগুলি সরানো হয় না, যেমন arr.length = 0
সমস্ত সূচকগুলি সরিয়ে দেয়। (5) অতএব, আমি মনে করি Object.assign
অনেক ভালো ।
Array.isArray
ফিরে আসছে true
যদিও instanceof Array
না ...
না দেখে অবাক -
console.log(
Object.assign({}, ['a', 'b', 'c'])
)
{ "first":"a", "second":"b","third":"c" }
কীগুলি ঠিক করার সাথে সাথে তৈরি করার জন্য যে কোনও স্মার্ট পরামর্শ - আমি একটি ধ্বংসের সন্ধান করছি
আমরা অ্যারেটিকে অবজেক্টে রূপান্তর করতে ব্যবহার করতে পারি 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)
আমি অবজেক্ট স্প্রেড অপারেটরটি ব্যবহার করে শেষ করেছি, যেহেতু এটি ECMAScript 2015 (ES6) মানের অংশ of
const array = ['a', 'b', 'c'];
console.log({...array});
// it outputs {0:'a', 1:'b', 2:'c'}
নিম্নলিখিত মেড বেহালার একটি উদাহরণ হিসাবে।
Object.assign({}, ['one', 'two']); // {0: 'one', 1: 'two'}
আধুনিক জাভাস্ক্রিপ্টে সহজ উপায় হ'ল এটি ব্যবহার করা Object.assign()
যা কী অনুলিপি করা ছাড়া আর কিছুই করে না: একটি বস্তু থেকে অন্য বস্তুর কাছে মান। আমাদের ক্ষেত্রে, Array
নতুনকে সম্পত্তি দান করে {}
।
O.assign
ছিল তবে এর ব্যাখ্যাটির অভাব রয়েছে। আজকাল অবজেক্টে অ্যারের বিন্যাস করা একটি উপায় ( {...array}
)
ES2016 এর জন্য, অবজেক্টগুলির জন্য স্প্রেড অপারেটর। দ্রষ্টব্য: এটি ES6 এর পরে এবং তাই ট্রান্সপেলারটি সামঞ্জস্য করতে হবে।
const arr = ['a', 'b', 'c'];
const obj = {...arr}; // -> {0: "a", 1: "b", 2: "c"}
পাঁচ বছর পরে, একটি ভাল উপায় আছে :)
Object.assign
ECMAScript 2015 এ চালু হয়েছিল।
Object.assign({}, ['a', 'b', 'c'])
// {'0':'a', '1':'b', '2':'c'}
একটি ব্যবহার করে javascript#forEach
এটি করা যায়
var result = {},
attributes = ['a', 'b','c'];
attributes.forEach(function(prop,index) {
result[index] = prop;
});
ইসিএমএ 6 সহ:
attributes.forEach((prop,index)=>result[index] = prop);
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;
আপনি স্প্রেড অপারেটর ব্যবহার করতে পারেন
x = [1,2,3,10]
{...x} // {0:1, 1:2, 2:3, 3:10}
আপনি যদি ES6 ব্যবহার করছেন তবে আপনি অবজেক্ট.সেসাইন এবং স্প্রেড অপারেটর ব্যবহার করতে পারেন
{ ...['a', 'b', 'c'] }
আপনি যদি অ্যারে নেস্টেড থাকে
var arr=[[1,2,3,4]]
Object.assign(...arr.map(d => ({[d[0]]: d[1]})))
new Map([['key1', 'value1'], ['key2', 'value2']]);
একটি দ্রুত এবং নোংরা:
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:
var i = 0
, s = {}
, a = ['A', 'B', 'C'];
while( a[i] ) { s[i] = a[i++] };
i < a.length
পরিবর্তে আপনার চেক করা উচিত a[i]
।
লোডাশ 3.0.০.০ হিসাবে আপনি _.toPlainObject ব্যবহার করতে পারেন
var obj = _.toPlainObject(['a', 'b', 'c']);
console.log(obj);
<script src="https://cdn.jsdelivr.net/lodash/4.16.4/lodash.min.js"></script>
এখানে আমি স্রেফ লিখেছি এমন একটি পুনরাবৃত্ত ফাংশন। এটি সহজ এবং ভালভাবে কাজ করে।
// 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}
করে তবে এটি নিখুঁত কাজ করে।
.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]
? কোড স্নিপেটগুলি কার্যকর করার জন্য এটি আরও কার্যকর হবে।
আমি সহজভাবে এটি করতে হবে Array.of()
। অ্যারে এর কনস্ট্রাক্টর হিসাবে প্রসঙ্গটি ব্যবহার করার ক্ষমতা রয়েছে।
দ্রষ্টব্য 2 ফাংশনটি ইচ্ছাকৃত জেনেরিক কারখানার পদ্ধতি; এটির প্রয়োজন হয় না যে এটির মানটি অ্যারে নির্মাণকারী হবে। সুতরাং এটি অন্য কনস্ট্রাক্টর দ্বারা স্থানান্তরিত বা উত্তরাধিকার সূত্রে প্রাপ্ত হতে পারে যা একক সংখ্যাসূচক যুক্তি দিয়ে ডাকতে পারে।
সুতরাং আমরা Array.of()
কোনও ফাংশনে বাঁধতে পারি এবং অবজেক্টের মতো অ্যারে তৈরি করতে পারি ।
function dummy(){};
var thingy = Array.of.apply(dummy,[1,2,3,4]);
console.log(thingy);
Array.of()
একটি ব্যবহার করে এমনকি অ্যারে উপ-শ্রেণিবদ্ধকরণ করতে পারেন ।
আপনি যদি ব্যবহার করতে পারেন 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
আইটেমের অ্যারেটিকে কোনও অবজেক্টে রূপান্তর করার একটি সহজ এবং কৌতুকপূর্ণ পদ্ধতি
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;
};
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})
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}
আরও ব্রাউজার সমর্থিত এবং এটি করার সহজতর উপায় যা সাধারণ লুপ ব্যবহার করে , এরকম কিছু:
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"}
আপনি এই জাতীয় ফাংশন ব্যবহার করতে পারেন:
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;
};
এই একটিকে আরও দক্ষতার সাথে স্পার্স অ্যারে পরিচালনা করা উচিত।
এখানে একটি সমাধান coffeescript
arrayToObj = (arr) ->
obj = {}
for v,i in arr
obj[i] = v if v?
obj
obj[i] = v for v,i in arr when v?