অ্যারে থেকে কীভাবে অ্যারে তৈরি করবেন [বন্ধ]


33

আমি একটি জাভাস্ক্রিপ্ট শিক্ষানবিশ এবং আমি একটি প্রধান অ্যারে থেকে মান সহ দুটি পৃথক অ্যারে তৈরি করার চেষ্টা করছি।

আমার মূল অ্যারেটি দেখতে:

0: Array(3) [ 2011, 127072.7, 51584 ]
1: Array(3) [ 2012, 125920.3, 59974 ]
2: Array(3) [ 2013, 129305.4, 15468 ]
3: Array(3) [ 2014, 135364, 84554 ]
4: Array(3) [ 2015, 136757, 98754 ]
5: Array(3) [ 2016, 155653.5, 155548 ]
6: Array(3) [ 2017, 164130.5, 284848 ]

এবং আমার দুটি অ্যারে তৈরি করা দরকার, প্রথমটির মতো দেখতে:

0: Array(2) [ 2011, 127072.7]
1: Array(2) [ 2012, 125920.3]
2: Array(2) [ 2013, 129305.4]
3: Array(2) [ 2014, 135364]
4: Array(2) [ 2015, 136757]
5: Array(2) [ 2016, 155653.5]
6: Array(2) [ 2017, 164130.5]

(প্রথম এবং দ্বিতীয় মান)

এবং দ্বিতীয় মত:

0: Array(2) [ 2011, 51584]
1: Array(2) [ 2012, 59974]
2: Array(2) [ 2013, 15468]
3: Array(2) [ 2014, 84554]
4: Array(2) [ 2015, 98754]
5: Array(2) [ 2016, 155548]
6: Array(2) [ 2017, 284848]

(প্রথম এবং তৃতীয় মান)

আমি স্প্লাইস, ফিল্টার ইত্যাদির চেষ্টা করছি তবে কীভাবে শুরু করব তা আমি জানি না।

আমাকে সঠিক সমাধান লেখার প্রয়োজন নেই, তবে কীভাবে এটি করা যায় কেবল পদক্ষেপগুলি।


দুর্দান্ত উত্তরের জন্য আপনাকে অনেক ধন্যবাদ। তারা দুর্দান্ত কাজ। ভবিষ্যতের জন্য আমার একটি প্রশ্ন থাকতে পারে। এটি দুটি ক্ষেত্রের সাথে স্থির না করা যাতে এটি করা যায়? কিন্তু এমনকি তিন, চার, ইত্যাদি?
ডোমিনিক লেভ

3
আপনি এখানে সমাধান করার চেষ্টা করছেন আসল সমস্যাটি কী? মনে হচ্ছে অবজেক্টের অ্যারে ব্যবহার করা আরও ভাল বিকল্প।
ব্লুরাজা - ড্যানি পিফ্লুঘুফুট

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

উত্তর:


29

আপনি একটি গতিশীল পন্থা নিতে পারেন এবং প্রতিটি নতুন অ্যারের জন্য মূল মানের পরে অ্যারের সমস্ত আইটেম পেতে পারেন।

var data = [[2011, 127072.7, 51584], [2012, 125920.3, 59974], [2013, 129305.4, 15468], [2014, 135364, 84554], [2015, 136757, 98754], [2016, 155653.5, 155548], [2017, 164130.5, 284848]],
    [first, second] = data.reduce(
        (r, [k, ...a]) => {
            a.forEach((v, i) => r[i].push([k, v]));
            return r;
        },
        Array.from({ length: Array.isArray(data[0]) ? data[0].length - 1 : 0 }, () => [])
    );

console.log(first);
console.log(second);
.as-console-wrapper { max-height: 100% !important; top: 0; }


একটি দুর্দান্ত উত্তরের জন্য আপনাকে অনেক ধন্যবাদ। আমি কি ভবিষ্যতের জন্য একটি প্রশ্ন করতে পারি? এটি কেবলমাত্র 2 টি অ্যারে নয় আরও আরও স্থির করাও সম্ভব?
ডোমিনিক লেভ

1
আপনি এর [first, second]সাথে প্রতিস্থাপন করতে পারবেন arrayএবং ডেটার সমস্ত কলামের সাথে অ্যারে হিসাবে অ্যারে পাবেন।
নিনা শোলজ

2
পরিবর্তে ধীর পরিবর্তে r[i] = r[i] || []আপনার কেবল Array.from({length: (data[0]?.length ?? 1) - 1}, () => [])প্রাথমিক সঞ্চয়ের মানটির জন্য ব্যবহার করা উচিত
বার্গি

3
@ নিনাশল্জ নং, আমি বোঝাতে চাইছি r[i]আপনি প্রতিটি লুপ পুনরাবৃত্তিতে উপস্থিত কিনা তা পরীক্ষা করছেন , আপনি কেবল reduceকলের বাইরে প্রয়োজনীয় ফলাফল অ্যারে তৈরি করতে পারবেন।
বার্গি

1
@ ক্লেকন না, অ্যারের সীমানার বাইরে অ্যারে অ্যাক্সেসগুলি খুব ধীর গতির, সুতরাং "ইতিমধ্যে উপস্থিত আছে কিনা তা পরীক্ষা করুন" ভাল কাজ করে না। আমার মন্তব্যটি পারফরম্যান্স সম্পর্কে চিন্তা করার জন্য নয়, ক্লিন এবং প্রেডিক্টেবল (সঠিক) কোড পছন্দ করা। আমি প্রথমে "বরং কুরুচিপূর্ণ এবং ধীর" লেখার আগে বুঝতে পেরেছিলাম যে আমার পরামর্শ যে খালি মামলার বিষয়টি সুস্পষ্ট করে তুলেছে তা বাস্তব সৌন্দর্য নয়।
বার্গি

14

আপনি .map()আপনার ডেটা ধরে পুনরাবৃত্তি করতে এবং পছন্দসই আউটপুট পেতে কিছু অ্যারে ডিস্ট্রাকচার ব্যবহার করতে পারেন:

const data = [
  [ 2011, 127072.7, 51584 ],
  [ 2012, 125920.3, 59974 ],
  [ 2013, 129305.4, 15468 ],
  [ 2014, 135364, 84554 ],
  [ 2015, 136757, 98754 ],
  [ 2016, 155653.5, 155548 ],
  [ 2017, 164130.5, 284848 ]
];

const arr1 = data.map(([year, val]) => ([year, val]));
const arr2 = data.map(([year, _, val]) => ([year, val]));

console.log(arr1);
console.log(arr2);
.as-console-wrapper { max-height: 100% !important; top: 0; }


একটি দুর্দান্ত উত্তরের জন্য আপনাকে অনেক ধন্যবাদ। আমি কি ভবিষ্যতের জন্য একটি প্রশ্ন করতে পারি? এটি কেবলমাত্র 2 টি অ্যারে নয় আরও আরও স্থির করাও সম্ভব?
ডোমিনিক লেভ

1
@ ডোমিনিকলাইভ সেক্ষেত্রে আপনি নিনার পোস্ট করা উত্তরটি ব্যবহার করতে পারেন। এটি নিঃসন্দেহে ভাল.
মোহাম্মদ উসমান

1
এই ব্যবহার সাধারণ যাবে বাকি প্যারামিটার সিনট্যাক্স থেকে([year, ...values]) => [year, values[n]]
JollyJoker

@ জলি জোকার - আপনার উত্তর হিসাবে এটি পোস্ট করা উচিত, এটি একটি দুর্দান্ত এবং সংক্ষিপ্ত সাধারণ সমাধান
ফিলিপ মিলোভানোভিচ

@ FilipMilovanović আমি ইতিমধ্যে করেনি stackoverflow.com/a/60166014/7126740
JollyJoker

6

আপনি Array.prototype.forEachমূল অ্যারের আইটেমগুলি নিয়ে পুনরাবৃত্তি করতে পারেন , তারপরে নতুন আইটেমগুলি তৈরি করুন এবং এগুলিকে নতুন অ্যারেতে ঠেলাবেন:

var original = [[ 2011, 127072.7, 51584 ], [ 2012, 125920.3, 59974 ], [ 2013, 129305.4, 15468 ]]

var array1 = []
var array2 = []

original.forEach(item => {
  array1.push([item[0], item[1]]);
  array2.push([item[0], item[2]]);
});

console.log(array1);
console.log(array2);

আউটপুট:

এখানে চিত্র বর্ণনা লিখুন


আমাদের অ্যারেগুলি গতিশীলরূপে তৈরি করা হয়েছে তাই আসল অ্যারেতে যত আইটেম রয়েছে তা সমাধান ছাড়াই কাজ করে:

var original = [
  [2011, 127072.7, 51584, 1, 2, 3],
  [2012, 125920.3, 59974, 4, 5, 6],
  [2013, 129305.4, 15468, 7, 8, 9]
]

// Array of arrays
var myArray = []

// Fill it with empty arrays
for (var i = 0; i < original[0].length - 1; i++)
  myArray.push([])

// Iterate over original
// For each original, insert the first and i-th element into our array of arrays
original.forEach(item => {
  for (var i = 1; i < item.length; i++) {
    myArray[i - 1].push([item[0], item[i]]);
  }
});

console.log(myArray);

আউটপুট: এখানে চিত্র বর্ণনা লিখুন


একটি দুর্দান্ত উত্তরের জন্য আপনাকে অনেক ধন্যবাদ। আমি কি ভবিষ্যতের জন্য একটি প্রশ্ন করতে পারি? এটি কেবলমাত্র 2 টি অ্যারে নয় আরও আরও স্থির করাও সম্ভব?
ডোমিনিক লেভ

1
মূল অ্যারেতে কত আইটেম থাকবে তা আগেই না জেনে গতিশীলভাবে অ্যারেগুলি তৈরি করা সম্ভব। আমার সম্পাদিত উত্তর একবার দেখুন :)
ইসমাইল পাদিলা

4

প্রথমত, আপনার প্রথমদিকে অ্যারে রয়েছে of সংক্ষিপ্ত উপায়ে সাববারি থেকে প্রতিটি মান পাওয়ার জন্য আপনি mapএই অ্যারেটিকে দুটি পৃথক অ্যারে destructuringকরতে পারেন:

const data = [
  [ 2011, 127072.7, 51584 ],
  [ 2012, 125920.3, 59974 ],
  [ 2013, 129305.4, 15468 ],
  [ 2014, 135364, 84554 ],
  [ 2015, 136757, 98754 ],
  [ 2016, 155653.5, 155548 ],
  [ 2017, 164130.5, 284848 ],
];

const array1 = data.map(([first, second, third]) => [first, second]);
const array2 = data.map(([first, second, third]) => [first, third]);

console.log(JSON.stringify(array1));
console.log(JSON.stringify(array2));


4

মূল অ্যারের মধ্য দিয়ে লুপ করুন এবং আপনার সন্তানের অ্যারে মানগুলিতে অ্যাক্সেসের জন্য নির্দিষ্ট সূচক মান ব্যবহার করে একটি নতুন অ্যারে ফিরুন।

const multiDimArr = [
  [2011, 127072.7, 51584],
  [2012, 125920.3, 59974],
  [2013, 129305.4, 15468],
  [2014, 135364, 84554],
  [2015, 136757, 98754],
  [2016, 155653.5, 155548],
  [2017, 164130.5, 284848],
]

const arr1= multiDimArr.map(x=>[x[0],x[1]]);
const arr2= multiDimArr.map(x=>[x[0],x[2]]);

console.log(arr1)
console.log(arr2)


3

আপনি ফাংশনটি হ্রাস হিসাবে অনুসরণ করতে পারেন যা কেবল একবারে পুনরাবৃত্তি হয়:

let matrix = [[ 2011, 127072.7, 51584 ],[ 2012, 125920.3, 59974 ],[ 2013, 129305.4, 15468 ],[ 2014, 135364, 84554 ],[ 2015, 136757, 98754 ],[ 2016, 155653.5, 155548 ],[ 2017, 164130.5, 284848 ]];

let result = matrix.reduce((a, [year, k, v]) => {
  a.second.push([year, k]);
  a.third.push([year, v]);
  return a;
}, {second: [], third: []});

console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }


এই উত্তরে সিএসএস কেন?
জোশুয়া ফক্স

1
@ জোশুয়াফক্স কেবল কনসোলের উচ্চতা বাড়ানোর জন্য।
ইলে

3

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

let values = [[ 2011, 127072.7, 51584 ],[ 2012, 125920.3, 59974 ],[ 2013, 129305.4, 15468 ],[ 2014, 135364, 84554 ],[ 2015, 136757, 98754 ],[ 2016, 155653.5, 155548 ],[ 2017, 164130.5, 284848 ]];

let chunk1 = values.map(arr1 => {
  return [arr1[0], arr1[1]]
});
let chunk2 = values.map(arr1 => {
  return [arr1[0], arr1[2]]
})

console.log("Chunk 1", chunk1);
console.log("Chunk 2", chunk2);


2

আমি লুপের জন্য মানচিত্র ব্যবহার করেছি, প্রয়োজনীয় মানগুলি ধাক্কা দেওয়ার জন্য দুটি অ্যারে।

let point_table = []
let integer_table = []
const historical_table = [
  [2011, 127072.7, 51584],
  [2012, 125920.3, 59974],
  [2013, 129305.4, 15468],
  [2014, 135364, 84554],
  [2015, 136757, 98754],
  [2016, 155653.5, 155548],
  [2017, 164130.5, 284848]
]
historical_table.map(row => {
  point_table.push([row[0], row[1]])
  integer_table.push([row[0], row[2]])
})
console.log(point_table, integer_table)


1

অন্য সমাধান:

 const original= [  [ 2011, 127072.7, 51584 ], [ 2012, 125920.3, 59974 ],[ 2013, 129305.4, 15468 ],  [ 2014, 135364, 84554 ],  [ 2015, 136757, 98754 ],  [ 2016, 155653.5, 155548 ],  [ 2017, 164130.5, 284848 ]];

আসল.ম্যাপ (x => [[x [0], এক্স [1]], [এক্স [0], এক্স [2]]]) .ড্রেস ((ক, বি) => এ কোডট (বি), [])


1

জেনেরিক সমাধানের জন্য, আমি মনে করি মান কলামগুলির জন্য সূচকের একটি অ্যারে তৈরি করা আপনার পছন্দসই অ্যারেগুলিতে পুরো ডেটা ম্যাপিংয়ের একটি সহজ উপায় দেয়।

[...data[0].keys()].slice(0,-1)

আপনাকে সূচকের একটি অ্যারে দেয়, বছরটি ছিল এমন এক কলামে বিয়োগ করবে এবং

n => data.map(([year, ...values]) => [year, values[n]])

নবম মানের কলামের জন্য আপনার পছন্দসই অ্যারে আপনাকে দেয়। তাই:

var data = [[2011, 127072.7, 51584], [2012, 125920.3, 59974], [2013, 129305.4, 15468], [2014, 135364, 84554], [2015, 136757, 98754], [2016, 155653.5, 155548], [2017, 164130.5, 284848]]

const yearArrays = arr => [...arr[0].keys()].slice(0,-1)
       .map(arr.map(([year, ...values]) => [year, values[n]]))

console.log(yearArrays(data));
.as-console-wrapper { max-height: 100% !important; top: 0; }


0

জেনেরিক দৈর্ঘ্যের ইনপুট অ্যারেগুলির জন্য আরেকটি সমাধান।

const input = [[1,11,111,1111],[2,22,222,2222]];

const result = input.reduce((accumulator, [head, ...tail]) => {
  tail.forEach((item, index) => {
    accumulator[index] = accumulator[index] || [];
    accumulator[index].push([head, item]);
  });
  return accumulator;
}, [])

console.log(result);


0

বিদ্যমান বহুমাত্রিক অ্যারে থেকে যে কোনও জেনেরিক সংমিশ্রণ তৈরি করতে এই সমাধানটি ব্যবহার করুন। স্পষ্টভাবে বাছাই করতে আপনাকে আইটেমের সূচকটি পাস করতে হবে এবং এটি এটিকে জেনেরিক করে তোলে।

    const multiDimArr = [
      [2011, 127072.7, 51584],
      [2012, 125920.3, 59974],
      [2013, 129305.4, 15468],
      [2014, 135364, 84554],
      [2015, 136757, 98754],
      [2016, 155653.5, 155548],
      [2017, 164130.5, 284848],
    ]


    function arrayCombo (idxA, idxB){
      return multiDimArr.map(x=>[x[idxA],x[idxB]]);
    }

    console.log(arrayCombo(0, 1));
    console.log(arrayCombo(0, 2));
    console.log(arrayCombo(1, 2));

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