আমি কীভাবে জাভাস্ক্রিপ্টে অবজেক্টগুলির অ্যারেটিকে একটি অবজেক্টে রূপান্তর করব?


102

আমার কাছে বস্তুর একটি অ্যারে রয়েছে:

[ 
  { key : '11', value : '1100', $$hashKey : '00X' },
  { key : '22', value : '2200', $$hashKey : '018' }
];

আমি কীভাবে এটি জাভাস্ক্রিপ্ট দ্বারা নিম্নলিখিতটিতে রূপান্তর করব?

{
  "11": "1000",
  "22": "2200"
}

4
[{key:"11", value:"1100"}, {key:"22", value:"2200"}].reduce(function(m,v){m[v.key] = v.value; return m;}, {})
ডেভিড

উত্তর:


52

আপনি সম্ভবত এরকম কিছু খুঁজছেন:

// original
var arr = [ 
  {key : '11', value : '1100', $$hashKey : '00X' },
  {key : '22', value : '2200', $$hashKey : '018' }
];

//convert
var result = {};
for (var i = 0; i < arr.length; i++) {
  result[arr[i].key] = arr[i].value;
}

console.log(result);


4
পরীক্ষা করে দেখুন FirstOne এর উত্তর একটি আধুনিক পদ্ধতির জন্য।
টিবোস

134

ক্ষুদ্র ES6 সমাধানটি দেখতে পাবেন:

var arr = [{key:"11", value:"1100"},{key:"22", value:"2200"}];
var object = arr.reduce(
  (obj, item) => Object.assign(obj, { [item.key]: item.value }), {});

console.log(object)

এছাড়াও, যদি আপনি অবজেক্ট স্প্রেড ব্যবহার করেন তবে এর চেয়ে দেখতে আরও ভালো লাগবে:

var object = arr.reduce((obj, item) => ({...obj, [item.key]: item.value}) ,{});

আরও একটি সমাধান যা 99% দ্রুত হয় তা হ'ল (jsppha তে পরীক্ষা করা):

var object = arr.reduce((obj, item) => (obj[item.key] = item.value, obj) ,{});

এখানে আমরা কমা অপারেটর থেকে উপকৃত হলাম, এটি কমা করার আগে সমস্ত অভিব্যক্তি মূল্যায়ন করে এবং একটি শেষ (শেষ কমা পরে) প্রদান করে। সুতরাং আমরা objপ্রতিবার অনুলিপি করি না , বরং এতে নতুন সম্পত্তি বরাদ্দ করি।


4
একটাকে ভালো লাগল! var object = arr.reduce((obj, item) => (obj[item.key] = item.value, obj) ,{});
সোহেল

এই এক লাইন দ্রুত বা প্রচলিত লুপ?
Jeb50

4
@ জেবি 50, প্রচলিত লুপটি দ্রুততম, তবে কমা অপারেটরের চেয়ে বেশি নয়। অবজেক্ট.সেসাইন / স্প্রেড অপারেটরটি প্রস্থের ধীর গতির একটি ক্রম: jsppha.com/comma-operator-js
জোশ গেলার

4
আপনি দ্বিতীয় বিষয় ছড়িয়ে দিতে ভুলে গেছেন({...obj, ...{[item.key]: item.value}}) ,{});
জুলিয়া

ধন্যবাদ, আসলে এটি কোনও বস্তুতে মোড়ানো প্রয়োজন হয় না। আমি এটি স্থির করেছি।
শেভচেঙ্কো ভিক্টর

59

আমি এই কাজটি অর্জনের জন্য কার্যকরী পদ্ধতির পছন্দ করি:

var arr = [{ key:"11", value:"1100" }, { key:"22", value:"2200" }];
var result = arr.reduce(function(obj,item){
  obj[item.key] = item.value; 
  return obj;
}, {});

দ্রষ্টব্য: ফাংশন হ্রাস করার জন্য সর্বশেষ {}প্রাথমিক objমানটি, যদি আপনি প্রাথমিক মানটি সরবরাহ না করেন তবে প্রথম arrউপাদানটি ব্যবহার করা হবে (যা সম্ভবত অনাকাঙ্ক্ষিত) is

https://jsfiddle.net/GreQ/2xa078da/


4
এবং কী যদি গতিশীল হয়?
স্টেফানো সায়্তা

4
ঠিক আছে, আপনার জানা উচিত যে প্রদত্ত আইটেম / অবজেক্টের কোন সম্পত্তি কী হিসাবে ব্যবহার করা উচিত এবং কোনটি মান হিসাবে? তবে আমরা যদি ধরে নিই যে wfirst প্রোপ সর্বদা কী এবং দ্বিতীয় হয় যা আমরা কলব্যাক ফাংশনটি এর মতো ব্যবহার করতে পারি: ফাংশন (اعتراض, আইটেম) keys var কীস = আইটেম.কিজ (); আপত্তি [আইটেম [কীগুলি [0]]] = আইটেম [কীগুলি [0]]; প্রত্যাবর্তন আপত্তি; }
গ্রিউইচ

উপরের কলব্যাকের সংশোধন: কোড ভেরিজেজ = এরিড্রেডস (ফাংশন (অবজেক্ট, আইটেম) {ভের কীস = অবজেক্ট.কিজ (আইটেম); আপত্তি [আইটেম [কীস [0]]] = আইটেম [কীগুলি [1]]; ফিরে আপত্তি;}, {});
গ্রিউইচ

58

ঠিক করার চেষ্টা এই উত্তর মধ্যে আমি কিভাবে জাভাস্ক্রিপ্ট মধ্যে এক বস্তু মধ্যে অবজেক্টস অ্যারে রূপান্তর করেন?,

এটি করা উচিত:

var array = [
    {key:'k1',value:'v1'},
    {key:'k2',value:'v2'},
    {key:'k3',value:'v3'}
];
var mapped = array .map(item => ({ [item.key]: item.value }) );
var newObj = Object.assign({}, ...mapped );
console.log(newObj );


এক রৈখিক:

var newObj = Object.assign({}, ...(array.map(item => ({ [item.key]: item.value }) )));


12

আধুনিক জাভাস্ক্রিপ্ট ব্যবহার করে এটি করার একটি পরিষ্কার উপায় নিম্নরূপ:

const array = [
  { name: "something", value: "something" },
  { name: "somethingElse", value: "something else" },
];

const newObject = Object.assign({}, ...array.map(item => ({ [item.name]: item.value })));

// >> { something: "something", somethingElse: "something else" }


5

অনেক লেখকের পরামর্শ দেওয়া উত্তরের ভিত্তিতে আমি জেএসপ্রিফ পরীক্ষার দৃশ্য তৈরি করেছি। https://jsperf.com/array2object82364

নীচে পারফরম্যান্সের স্ক্রিনশট রয়েছে। এটি দেখতে আমার কাছে কিছুটা অবাক করে দেওয়া, ক্রোম ফলাফল ফায়ারফক্স এবং প্রান্তের সাথে বিপরীত, এটি বেশ কয়েকবার চালানোর পরেও।

প্রান্ত

ফায়ারফক্স

ক্রোম



2

আপডেট: দুনিয়া ঘুরে দাঁড়িয়েছে। পরিবর্তে একটি কার্যকরী পদ্ধতির ব্যবহার করুন।

আপনি এখানে যান:

var arr = [{ key: "11", value: "1100" }, { key: "22", value: "2200" }];
var result = {};
for (var i=0, len=arr.length; i < len; i++) {
    result[arr[i].key] = arr[i].value;
}
console.log(result); // {11: "1000", 22: "2200"}

এটি আশ্চর্যজনকভাবে 5 মিনিটের আগে পোস্ট করা উত্তরটির সাথে সাদৃশ্যপূর্ণ
আলেকজান্ডার

4
কারণ আপনি এই সমস্যার সমাধান করেন solve উদাহরণস্বরূপ নামকরণ সম্পর্কে: arrayএকটি সংরক্ষিত কীওয়ার্ড তাই লোকেরা arrপরিবর্তে ব্যবহার করে। ইত্যাদি
pstadler

0

উপরের স্ট্রিং হিসাবে কীভাবে গতিশীলরূপে গ্রহণ এবং এটি কোনও বস্তুর মধ্যে বিভক্ত করা যায় তা এখানে রয়েছে:

var stringObject = '[Object { key="11", value="1100", $$hashKey="00X"}, Object { key="22", value="2200", $$hashKey="018"}]';

function interpolateStringObject(stringObject) {
  var jsObj = {};
  var processedObj = stringObject.split("[Object { ");
  processedObj = processedObj[1].split("},");
  $.each(processedObj, function (i, v) {
      jsObj[v.split("key=")[1].split(",")[0]] = v.split("value=")[1].split(",")[0].replace(/\"/g,'');
  });

  return jsObj
}

var t = interpolateStringObject(stringObject); //t is the object you want

http://jsfiddle.net/3QKmX/1/


0

// original
var arr = [{
    key: '11',
    value: '1100',
    $$hashKey: '00X'
  },
  {
    key: '22',
    value: '2200',
    $$hashKey: '018'
  }
];

// My solution
var obj = {};
for (let i = 0; i < arr.length; i++) {
  obj[arr[i].key] = arr[i].value;
}
console.log(obj)


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

0

আপনি তার জন্য মানচিত্রকিজ লড্যাশ ফাংশন ব্যবহার করতে পারেন। কোডের এক লাইন!

দয়া করে এই সম্পূর্ণ কোড নমুনা দেখুন (এটি অনুলিপি repl.it বা অনুরূপ মধ্যে পেস্ট করুন):

import _ from 'lodash';
// or commonjs:
// const _ = require('lodash');

let a = [{ id: 23, title: 'meat' }, { id: 45, title: 'fish' }, { id: 71, title: 'fruit' }]
let b = _.mapKeys(a, 'id');
console.log(b);
// b:
// { '23': { id: 23, title: 'meat' },
//   '45': { id: 45, title: 'fish' },
//   '71': { id: 71, title: 'fruit' } }

-2
        var obj = [
            {id: 1 , name : 'gaju' , class : 'kv'},
            {id: 2 , name : 'tushar' , class : 'Super'}
        ];

        function conv(obj,arg){
        var temp= {};
        var output= {}
        for(key in obj){
        temp[key] = obj[key];
        };

        var i=0;
        for(key in temp){
        var aa = {};
        var value = temp[key][arg];
        aa[value] = temp[i];
        //console.log(aa[value][arg] );
        output[aa[value][arg]]=  aa[value];
        i++;
        }

       console.log(output); 
        }

calling function 

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