কীভাবে জাভাস্ক্রিপ্টে কী-মান জোড়ের কোনও বস্তু {। কে একটি অ্যারে [] তে রূপান্তর করা যায়


243

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

{"1":5,"2":7,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0}

এর মতো কী-মান জোড়ার একটি অ্যারেতে:

[[1,5],[2,7],[3,0],[4,0]...].

কীভাবে আমি জাভাস্ক্রিপ্টে কী-মান জোড়ের একটি অ্যারেতে কোনও অবজেক্টকে রূপান্তর করতে পারি?

উত্তর:


428

আপনি ব্যবহার করতে পারেন Object.keys()এবং map()এই কাজ করতে

var obj = {"1":5,"2":7,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0}
var result = Object.keys(obj).map(function(key) {
  return [Number(key), obj[key]];
});

console.log(result);


6
@blvckasvp আপনি কি কীগুলি সংখ্যা হিসাবে ব্যবহার করছেন? যদি তা না হয়, যখন এটি আপনার কীটিকে কোনও সংখ্যায় রূপান্তরিত করার চেষ্টা করবে এটি ব্যর্থ হবে এবং NaNপরিবর্তে ফিরে আসবে । আপনার নির্দেশক হিসাবে স্ট্রিং ব্যবহার থেকে ফেরত পরিবর্তন করতে চান [Number(key), obj[key]]করতে [key, obj[key]]বা ব্যবহার Object.entriesযেমন @Pila তাদের উত্তরে প্রস্তাব
scottbot95

123

সবচেয়ে ভাল উপায় হ'ল:

var obj ={"1":5,"2":7,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10"‌​:0,"11":0,"12":0} 
Object.entries(obj);

entriesএখানে প্রদর্শিত হিসাবে কল করা ফিরে আসবে[key, value] অনুরোধকারী অনুরোধ করা অনুসারে জোড়া ।

বিকল্পভাবে, আপনি কল Object.values(obj)করতে পারেন, যা শুধুমাত্র মান ফিরে আসবে।


6
প্রিয় বিকাশকারীগণ, দয়া করে কয়েক মিনিট আগে মুক্তিপ্রাপ্ত ব্রাউজারগুলির সাথে উপযুক্ত এই দুর্দান্ত ফাংশনগুলি গ্রহণ করার আগে ECMA সামঞ্জস্যতা টেবিলটি দেখুন।
andreszs

8
@ অ্যান্ড্রেসগুলি দেখুন আমি কী টেবিলটি ব্যবহার করতে পারি , আপনি যদি আইই সমর্থনটি বাদ দিতে আপত্তি না পান (এবং 2019 সালে, আমি আপনার বুদ্ধিমানের জন্য আশা করি যা আপনি সত্যিই করেন না) তবে আপনি যেতে খুব ভাল। এফএফ 47 জুন 2016 থেকে এবং ক্রোম 54 একই বছরের অক্টোবর, 14 ই আগস্ট থেকে। ঠিক মিনিট আগে না।
কিয়েল

এফওয়াইআই: অবজেক্ট.এন্ট্রিগুলি [কী, মান] ফিরে আসবে, তবে কীটি একটি স্ট্রিং হবে, মান পৃথক হবে।
শাহবাজ

62

Object.entries()এমন অ্যারে প্রদান করে যার উপাদানগুলিতে [key, value]সরাসরি পাওয়া যায় এমন অসংখ্য সংখ্যক জুটির সাথে মিল রেখে অ্যারে হয় object। বৈশিষ্ট্যগুলির ক্রম হ'ল ম্যানুয়ালি বস্তুর সম্পত্তি মানগুলি লুপ করে দেওয়া।

- https://developer.mozilla.org/en-US/docs/Web/JavaScript/ উল্লেখ / গ্লোবাল_অবজেক্টস / অবজেক্ট / এন্ট্রিগুলি# বিবরণ

Object.entriesফাংশন আয় প্রায় সঠিক আউটপুট তোমার জন্য বলছি, কি ব্যতীত সংখ্যার পরিবর্তে স্ট্রিং হয়।

const obj = {"1":5,"2":7,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0};

console.log(Object.entries(obj));

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

const obj = {"1":5,"2":7,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0};

const toNumericPairs = input => {
    const entries = Object.entries(input);
    return entries.map(entry => Object.assign(entry, { 0: +entry[0] }));
}

console.log(toNumericPairs(obj));

আমি Object.assignউপরের উদাহরণে একটি তীর ফাংশন এবং মানচিত্র কলব্যাকের জন্য ব্যবহার করছি যাতে আমি এটিকে সঠিকভাবে কাজে লাগিয়ে একটি নির্দেশে রাখতে পারিObject.assign অবজেক্টটি যে বরাদ্দ করা হয়েছে ফেরত দিয়ে এবং একটি একক নির্দেশ তীর ফাংশনের রিটার্ন মান নির্দেশের ফলাফল।

এটি সমান:

entry => {
    entry[0] = +entry[0];
    return entry;
}

মন্তব্যগুলিতে @ ট্র্যাভিস ক্লার্ক দ্বারা উল্লিখিত হিসাবে, মানচিত্রের ফাংশনটি ছোট করা যেতে পারে:

entry => [ +entry[0], entry[1] ]

যাইহোক, এটি বিদ্যমান কী অ্যারে জায়গায় পরিবর্তিত না করে প্রতিটি কী-মান জোড়ের জন্য একটি নতুন অ্যারে তৈরি করবে, সুতরাং কী-মান জোড়ার অ্যারে তৈরির পরিমাণ দ্বিগুণ করবে। মূল এন্ট্রি অ্যারে এখনও অ্যাক্সেসযোগ্য তবে এটি এবং এর এন্ট্রিগুলি আবর্জনা সংগ্রহ করা হবে না।

এখন, যদিও আমাদের ইন-প্লেস পদ্ধতিটি এখনও দু'টি অ্যারে ব্যবহার করে যা কী-মান জোড় (ইনপুট এবং আউটপুট অ্যারে) ধারণ করে, মোট অ্যারে কেবলমাত্র এক দ্বারা পরিবর্তিত হয়। ইনপুট এবং আউটপুট অ্যারেগুলি আসলে অ্যারেতে পূর্ণ হয় না, বরং অ্যারেগুলির জন্য উল্লেখগুলি এবং সেইগুলি উল্লেখগুলি স্মৃতিতে একটি নগন্য পরিমাণের জায়গা নেয়।

  • প্রতিটি কী-মান জুটির স্থান-পরিবর্তন করে নেওয়ার পরিমাণে মেমরির বৃদ্ধির পরিমাণ নগণ্য হয়, তবে আরও কয়েকটি অক্ষর টাইপ করা দরকার।
  • প্রতিটি কী-মান জোড়ের জন্য একটি নতুন অ্যারে তৈরি করা ফলশ্রুতিতে প্রয়োজনীয় মেমরির পরিমাণ দ্বিগুণ করে, তবে কয়েকটি কম অক্ষর টাইপ করা দরকার।

আপনি আরও এক ধাপ এগিয়ে যেতে পারেন এবং নতুন অ্যারে ম্যাপিংয়ের পরিবর্তে এন্ট্রি অ্যারে-তে স্থান পরিবর্তন করে সামগ্রিকভাবে বৃদ্ধি হ্রাস করতে পারেন:

const obj = {"1":5,"2":7,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0};

const toNumericPairs = input => {
  const entries = Object.entries(obj);
  entries.forEach(entry => entry[0] = +entry[0]);
  return entries;
}

console.log(toNumericPairs(obj));


1
আমি কার্যকরী পদ্ধতির পছন্দ করি। একটি সংক্ষিপ্ত বিকল্প হিসাবে:Object.entries(obj).map(e => [+e[0], e[1]]);
ট্র্যাভিস ক্লার্ক

21

2018 এ এখনই এইগুলির কয়েকটি উত্তর পুনরুদ্ধার করতে যেখানে ES6 স্ট্যান্ডার্ড।

অবজেক্ট দিয়ে শুরু:

let const={"1":9,"2":8,"3":7,"4":6,"5":5,"6":4,"7":3,"8":2,"9":1,"10":0,"12":5};
  • কেবল অন্ধভাবে একটি অ্যারেতে মানগুলি পাওয়া, কীগুলি যত্ন নেবেন না:

const obj={"1":9,"2":8,"3":7,"4":6,"5":5,"6":4,"7":3,"8":2,"9":1,"10":0,"12":5};
console.log(Object.values(obj));
//[9,8,7,6,5,4,3,2,1,0,5]

  • অ্যারেতে জোড়া পাওয়া সহজ:

const obj={"1":9,"2":8,"3":7,"4":6,"5":5,"6":4,"7":3,"8":2,"9":1,"10":0,"12":5};
console.log(Object.entries(obj));
//[["1",9],["2",8],["3",7],["4",6],["5",5],["6",4],["7",3],["8",2],["9",1],["10",0],["12",5]]

  • পূর্বের মতো একই, তবে প্রতিটি জোড়ের সংখ্যাসূচক কীগুলি:

const obj={"1":9,"2":8,"3":7,"4":6,"5":5,"6":4,"7":3,"8":2,"9":1,"10":0,"12":5};
console.log(Object.entries(obj).map(([k,v])=>[+k,v]));
//[[1,9],[2,8],[3,7],[4,6],[5,5],[6,4],[7,3],[8,2],[9,1],[10,0],[12,5]]

  • নতুন অ্যারের জন্য কী হিসাবে অবজেক্ট প্রোপার্টিটি ব্যবহার করা (স্পার্স অ্যারে তৈরি করতে পারে):

const obj={"1":9,"2":8,"3":7,"4":6,"5":5,"6":4,"7":3,"8":2,"9":1,"10":0,"12":5};
console.log(Object.entries(obj).reduce((ini,[k,v])=>(ini[k]=v,ini),[]));
//[undefined,9,8,7,6,5,4,3,2,1,0,undefined,5]

এই শেষ পদ্ধতিটি, এটি কীগুলির মান অনুসারে অ্যারে ক্রমটিকে পুনর্গঠিত করতে পারে। কখনও কখনও এটি পছন্দসই আচরণ হতে পারে (কখনও কখনও না)। তবে এখন সুবিধাটি হ'ল মানগুলি সঠিক অ্যারে স্লটে ইনডেক্স করা হয়, এটি অনুসন্ধান করতে অপরিহার্য এবং তুচ্ছ।

  • অ্যারের পরিবর্তে মানচিত্র

শেষ অবধি (মূল প্রশ্নের অংশ নয়, তবে সম্পূর্ণতার জন্য), যদি আপনার কী বা মানটি ব্যবহার করে সহজ অনুসন্ধানের প্রয়োজন হয় তবে আপনি সংখ্যক কীগুলিতে রূপান্তরিত করার প্রয়োজন ছাড়া স্পারস অ্যারে, কোনও ডুপ্লিকেট এবং কোনও পুনরায় বিন্যাস চান না ( এমনকি খুব জটিল কী অ্যাক্সেস করতে পারে), তারপরে অ্যারে (বা অবজেক্ট) আপনার প্রয়োজনীয় যা তা নয়। Mapপরিবর্তে আমি সুপারিশ করব :

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Map

let r=new Map(Object.entries(obj));
r.get("4"); //6
r.has(8); //true

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

হ্যাঁ, প্রথম সারির রাজ্য হিসাবে, এটি উত্তরের সংক্ষিপ্তসার, তারপরে পুরো ঘা ফাংশনের পরিবর্তে আধুনিক ES6 কৌশলগুলি ব্যবহার করতে তাদের আপডেট করুন। চতুর্থ উত্তরটি কার্যকর যখন আপনি JSON অ্যারেগুলিকে এমন ভাষা থেকে সরিয়ে নিয়ে যাচ্ছেন যা সাহসী অ্যারেগুলিকে সমর্থন করে (যেমন পিএইচপি)।
কার্লোস

এখানে প্রদত্ত সমস্ত পদ্ধতি ইতিমধ্যে তাদের শীর্ষ তিনটি উত্তরের দুটিতে তাদের সরল আকারে সরবরাহ করা হয়েছে, সেগুলি কার্যক্রমে নেই তাই আপনি কী করছেন সে বিষয়ে আমি জানি না। যতদূর 4 র্থ হিসাবে আমি বলেছি এটি জিজ্ঞাসিত প্রশ্নের সম্পূর্ণ অপ্রাসঙ্গিক। এটি অন্য প্রশ্নের সাথে প্রাসঙ্গিক হতে পারে তবে এটির একটি নয়। নির্বিশেষে, পিএসপি, জাভাস্ক্রিপ্ট বা হাস্কেল ব্যবহার করে তৈরি করা হয়েছে কিনা তা JSON হ'ল JSON।

18

তবুও আরেকটি সমাধান যদি আপনার Object.entriesপক্ষে কাজ করে না।

const obj = {
      '1': 29,
      '2': 42
    };
const arr = Array.from(Object.keys(obj), k=>[`${k}`, obj[k]]);
console.log(arr);


1
এটি আমার পক্ষে কাজ করেছে। আমি এমন একটি সমস্যা পেয়েছি যেখানে জেএসওএন আমদানি করে এমন সূচিগুলি যুক্ত করেছে যা অ্যাঙ্গুলারস এনজিফোর্ড লুপটি ব্যবহার করা অসম্ভব করে তুলেছে। কাঠামো সংরক্ষণের সময় এটি সূচকগুলি সরিয়ে দেয়।
আরএসি

"সূচকগুলি" পরিবর্তে "সূচী" ব্যবহারের জন্য @ আরএসি +1 করুন। শুরু, প্রত্নতাত্ত্বিক (অর্থাত্ নির্বিচারে এবং অর্থহীন বিচক্ষণ) ইংরেজি traditionsতিহ্য!
ভেন্রিক্স

12

ইকোমাস্রিপ্ট 6 এ,

var obj = {"1":5,"2":7,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0};

var res = Object.entries(obj);

console.log(res);

বেহালা



1
আমি ডাউনভিট করিনি, তবে মনে রাখবেন যে .map((value)=>(value))অংশটি অর্থহীন - এটি কেবল Object.entries(obj)কল থেকে প্রাপ্ত ব্যক্তির ঠিক সমান একটি এন্ট্রি-অ্যারে প্রদান করে ।
ভেন্রিক্স

8

ব্যবহার Object.keysএবং Array#mapপদ্ধতি।

var obj = {
  "1": 5,
  "2": 7,
  "3": 0,
  "4": 0,
  "5": 0,
  "6": 0,
  "7": 0,
  "8": 0,
  "9": 0,
  "10": 0,
  "11": 0,
  "12": 0
};
// get all object property names
var res = Object.keys(obj)
  // iterate over them and generate the array
  .map(function(k) {
    // generate the array element 
    return [+k, obj[k]];
  });

console.log(res);


7

বিন্যাসে Object.entriesপ্রতিটি উপাদানের পেতে ব্যবহার করুন key & value, তারপরে mapতাদের মাধ্যমে:

var obj = {"1":5,"2":7,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0}

var res = Object.entries(obj).map(([k, v]) => ([Number(k), v]));

console.log(res);

তবে, আপনি যদি নিশ্চিত হন যে কীগুলি প্রগতিশীল ক্রমে থাকবে আপনি ব্যবহার করতে পারেন Object.valuesএবং এর Array#mapমতো কিছু করতে পারেন:

var obj = {"1":5,"2":7,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0}; 

                        // idx is the index, you can use any logic to increment it (starts from 0)
let result = Object.values(obj).map((e, idx) => ([++idx, e]));

console.log(result);



5

লোড্যাশের সাথে উপরের সরবরাহ করা উত্তর ছাড়াও, আপনার আউটপুট অ্যারেতে কী থাকতে পারে।

আউটপুট অ্যারেতে অবজেক্ট কী ছাড়া

জন্য:

const array = _.values(obj);

আপত্তি যদি নিম্নলিখিত হয়:

{ art”: { id: 1,  title: aaaa }, fiction”: { id: 22,  title: 7777”} }

তারপরে অ্যারে হবে:

[ { id: 1, title: aaaa }, { id: 22, title: 7777 } ]

আউটপুট অ্যারেতে অবজেক্ট কী সহ

আপনি যদি পরিবর্তে লিখেন ('জেনার' আপনার পছন্দ মতো একটি স্ট্রিং):

const array= _.map(obj, (val, id) => {
    return { ...val, genre: key };
  });

তুমি পাবে:

[ 
  { id: 1, title: aaaa , genre: art”}, 
  { id: 22, title: 7777”, genre: fiction }
]


1

আপনি ব্যবহার করতে পারেন Object.values([]), আপনার যদি ইতিমধ্যে না থাকে তবে আপনার এই পলফিলের প্রয়োজন হতে পারে:

const objectToValuesPolyfill = (object) => {
  return Object.keys(object).map(key => object[key]);
};
Object.values = Object.values || objectToValuesPolyfill;

https://stackoverflow.com/a/54822153/846348

তারপরে আপনি ঠিক করতে পারেন:

var object = {1: 'hello', 2: 'world'};
var array = Object.values(object);

কেবল মনে রাখবেন যে জেএসে অ্যারে কেবল সংখ্যা কীগুলি ব্যবহার করতে পারে তাই আপনি যদি বস্তুটিতে অন্য কিছু ব্যবহার করেন তবে সেগুলি `0,1,2 ... x`` হয়ে যাবে

উদাহরণস্বরূপ ডুপ্লিকেটগুলি অপসারণ করতে দরকারী যদি আপনার কোনও অনন্য কী থাকে।

var obj = {};
object[uniqueKey] = '...';

0

ইন জন্য ব্যবহার করুন

var obj = { "10":5, "2":7, "3":0, "4":0, "5":0, "6":0, "7":0,
            "8":0, "9":0, "10":0, "11":0, "12":0 };

var objectToArray = function(obj) {
    var _arr = [];

    for (var key in obj) {
        _arr.push([key, obj[key]]);
    }
    return _arr;
}

console.log(objectToArray(obj));

0

অ্যারেতে পুনরাবৃত্তিমূলক রূপান্তর করুন

function is_object(mixed_var) {
    if (mixed_var instanceof Array) {
        return false;
    } else {
        return (mixed_var !== null) && (typeof( mixed_var ) == 'object');
    }
}


function objectToArray(obj) {
    var array = [], tempObject;
    for (var key in obj) {

        tempObject = obj[key];

        if (is_object(obj[key])) {
            tempObject = objectToArray(obj[key]);
        }
        array[key] = tempObject;
    }
    return array;
}

0

আমরা নীচের মতো কী এর জন্য স্ট্রিং প্রকারে নম্বর পরিবর্তন করতে পারি:

var obj = {"1":5,"2":7,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0}
var result = Object.keys(obj).map(function(key) {
  return [String(key), obj[key]];
});
    
console.log(result);


0

এটি আমার সমাধান, আমার একই সমস্যা রয়েছে এবং আমার কাছে এই সমাধানটি আমার মতো কাজ করে বলে মনে হচ্ছে।

yourObj = [].concat(yourObj);

0

এটি আমার সাধারণ নগ্ন হাড় বাস্তবায়ন:

let obj = {
  "1": 5,
  "2": 7,
  "3": 0,
  "4": 0,
  "5": 0,
  "6": 0,
  "7": 0,
  "8": 0,
  "9": 0,
  "10": 0,
  "11": 0,
  "12": 0
};    

const objectToArray = obj => {
      let sol = [];
      for (key in obj) {
        sol.push([key, obj[key]]);
      }
      return sol;
    };

objectToArray(obj)


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