কীভাবে একটি নতুন অ্যারে তৈরি করতে JSON ফর্ম্যাট অ্যারে VALUE এবং মূল কী তুলনা করবেন? কৌণিক 5 এ


10

এখানে আমার প্রথম JSON অ্যারে ফর্ম্যাটটি রয়েছে:

this.columnNames = [
  {field : "Name"},
  {field : "Address"},
  {field : "Age"}
];

এখানে আমার প্রথম JSON অ্যারে ফর্ম্যাটটি রয়েছে:

this.rowData = [
  {Name : "Praveen",Address : "aiff",Age : "12",w :  "1",e :  "8"},
  {Name : "Akashay",Address : "xvn",Age : "15",w :  "2",e :  "7"},
  {Name : "Bala",Address : "hjk",Age : "16",w :  "3",e :  "6"}, 
  {Name : "Charu",Address : "sss",Age : "17",w :  "4",e :  "5"},
];  

এখানে আমি VALUE টি তুলনা করতে চাই যা প্রথম array(columnNames)এবং KEYS এ উপস্থিত রয়েছে যা দ্বিতীয় অ্যারেতে উপস্থিত রয়েছে। যদি এটি সমান হয়, তবে আমি সেই মেলানো ডেটাটিকে দ্বিতীয় থেকে array(rowData)নতুন অ্যারেতে চাপতে চাই।

এবং আমি এই মত আমার চূড়ান্ত ফলাফল চাই:

public rowData: any =[
  {Name : "Praveen",Address : "aiff",Age : "12"},
  {Name : "Akashay",Address : "xvn",Age : "15"},
  {Name : "Bala",Address : "hjk",Age : "16"}, 
  {Name : "Charu",Address : "sss",Age : "17"},
];

আপনি নিজে এ চেষ্টা করেছেন?
টাইলার

উত্তর:


10

আপনার columnNamesঅ্যারেতে প্রতিটি অবজেক্ট থেকে ক্ষেত্রগুলি আঁকুন .map()। তারপরে, প্রতিটি অবজেক্টটি rowDataতৈরি করে তৈরি করা একটি নতুন অবজেক্টে ম্যাপ করুন .reduce(), এতে কেবল আপনার fieldsঅ্যারে থেকে কীগুলি অন্তর্ভুক্ত রয়েছে :

const columnNames = [
  {field : "Name"},
  {field : "Address"},
  {field : "Age"}
];

const rowData = [
  {Name : "Praveen",Address : "aiff",Age : "12",w :  "1",e :  "8"},
  {Name : "Akashay",Address : "xvn",Age : "15",w :  "2",e :  "7"},
  {Name : "Bala",Address : "hjk",Age : "16",w :  "3",e :  "6"}, 
  {Name : "Charu",Address : "sss",Age : "17",w :  "4",e :  "5"},
];  

const fields = columnNames.map(({field}) => field); // get array ["Name", "Address", "Age"]
const result = rowData.map( // map each object in rowData to a new object
  o => fields.reduce((obj, k) => ({...obj, [k]: o[k]}), {})
  //    ^^ construct the new object, using reduce, spread syntax and computed property names
);

console.log(result);
.as-console-wrapper { max-height: 100% !important;} /* ignore */

আপনি যদি সমর্থন করতে পারেন Object.fromEntries()(যা নেস্টেড জোড়গুলির একটি অ্যারে নেয় [key, value]এবং সেগুলি থেকে কোনও বস্তু তৈরি করে), তবে ব্যবহার করার দরকার নেই .reduce():

const columnNames = [
  {field : "Name"},
  {field : "Address"},
  {field : "Age"}
];

const rowData = [
  {Name : "Praveen",Address : "aiff",Age : "12",w :  "1",e :  "8"},
  {Name : "Akashay",Address : "xvn",Age : "15",w :  "2",e :  "7"},
  {Name : "Bala",Address : "hjk",Age : "16",w :  "3",e :  "6"}, 
  {Name : "Charu",Address : "sss",Age : "17",w :  "4",e :  "5"},
];  

const fields = columnNames.map(({field}) => field);
const result = rowData.map( 
  o => Object.fromEntries(fields.map(k => [k, o[k]]))
);

console.log(result);
.as-console-wrapper { max-height: 100% !important;} /* ignore */


হাই, আমার একটা সমস্যা আছে আপনি কি আমার সমস্যা সমাধান করতে পারেন? :) এখানে লিঙ্ক [হয় stackoverflow.com/questions/60089217/...
Sakkeer একজন

5

আপনি অ্যারের filterউপর ভিত্তি করে আপনার অবজেক্টের বৈশিষ্ট্যগুলি columnNamesব্যবহার করতে পারেন এবং তারপরে কেবল এটি ব্যবহার করে একটি সামগ্রী তৈরি করতে পারেন Object.fromEntries:

const result = rowData.map(s => Object.fromEntries(
    Object.entries(s).filter(([k, v]) => columnNames.some(cl => cl.field == k))));

একটি উদাহরণ:

let columnNames = [
  {field : "Name"},
  {field : "Address"},
  {field : "Age"}
];

let rowData = [
  {Name : "Praveen",Address : "aiff",Age : "12",w :  "1",e :  "8"},
  {Name : "Akashay",Address : "xvn",Age : "15",w :  "2",e :  "7"},
  {Name : "Bala",Address : "hjk",Age : "16",w :  "3",e :  "6"},
  {Name : "Charu",Address : "sss",Age : "17",w :  "4",e :  "5"},
];

const result = rowData.map(s => Object.fromEntries(
    Object.entries(s).filter(([k, v]) => columnNames.some(cl => cl.field == k))));
console.log(result);

বা আরও ডিবাগযোগ্য সংস্করণ:

const result = rowData.map(s => {
  let allProperties = Object.entries(s);
  let filteredProperties = allProperties.filter(([k, v]) => 
      columnNames.some(cl => cl.field == k));
  let result = Object.fromEntries(filteredProperties);
  return result;
})

একটি উদাহরণ:

let columnNames = [
  {field : "Name"},
  {field : "Address"},
  {field : "Age"}
];

let rowData = [
  {Name : "Praveen",Address : "aiff",Age : "12",w :  "1",e :  "8"},
  {Name : "Akashay",Address : "xvn",Age : "15",w :  "2",e :  "7"},
  {Name : "Bala",Address : "hjk",Age : "16",w :  "3",e :  "6"},
  {Name : "Charu",Address : "sss",Age : "17",w :  "4",e :  "5"},
];

const result = rowData.map(s => {
  let allProperties = Object.entries(s);
  let filteredProperties = allProperties.filter(([k, v]) => 
      columnNames.some(cl => cl.field == k));
  let result = Object.fromEntries(filteredProperties);
  return result;
})

Object.fromEntries হল এমন একটি পদ্ধতি যা কী-মান জোড়ার তালিকাকে কোনও বস্তুতে রূপান্তর করে।

নিম্নলিখিত সারিটির অর্থ হ'ল আমরা অ্যারের উপর ভিত্তি করে অ্যারে ফিল্টার করি ()allProperiescolumnNames

কিছু () পদ্ধতি trueযদি কিছু সম্পত্তি columnNamesথাকে তবে তা প্রদান করে allProperties:

let filteredProperties = allProperties.filter(([k, v]) => 
     columnNames.some(cl => cl.field == k)); 

আপনার প্রতিক্রিয়া জন্য আপনাকে অনেক ধন্যবাদ। এতে আমার সন্দেহ আছে, আমি কৌণিক 8 এর এক শিক্ষানবিশ ঠিক ঠিক জানি না "অবজেক্ট.ফর্মএন্ট্রি" কী, এবং আপনি দয়া করে এইটিকে "ফিল্টারপ্রপ্রেটিস = allProperties.filter" (([কে, ভি]) ব্যাখ্যা করতে পারেন => কলামনাম.সোম (সিএল => ক্লিফিল্ড == কে)); "। অবিরাম আপনাকে ধন্যবাদ!
প্রবীণ শিবনাদিয়ার

@ প্রবীণসিভানাদিয়ার দয়া করে আমার আপডেট হওয়া উত্তরটি দেখুন
স্টেপআপ

@ স্টেপআপ হাই, আমার একটি সমস্যা আছে। আপনি কি আমার সমস্যা সমাধান করতে পারেন? :) এখানে লিঙ্ক [হয় stackoverflow.com/questions/60089217/...
Sakkeer একজন

3

.Mapkeys ব্যবহার করে সমস্ত ক্ষেত্রের নাম একটি ভেরিয়েবলে সঞ্চয় করুন । তারপরে মূল অ্যারেটি লুপ করুন এবং উপস্থিত বৈশিষ্ট্যযুক্ত একটি বস্তু তৈরি করুনkeys

এটির মতো চেষ্টা করুন:

let keys = this.columnNames.map(x => x.field);

this.rowData.forEach(item => {
  let obj = {}
  keys.forEach(key => {
    obj[key] = item[key]
  });
  this.result.push(obj)
});

ওয়ার্কিং ডেমো


আপনি দয়া করে এখানে কি ঘটতে পারে তা ব্যাখ্যা করতে পারেন? key.forEach (key => {اعتراض [কী] = আইটেম [কী]});
প্রবীণ শিবনাদিয়ার

অবশ্যই, আমি বিবরণটি যুক্ত করছি
আদ্রিতা শর্মা

পছন্দ করুন যদি এটি সহায়ক হয় তবে আমাকে জানান
আদ্রিতা শর্মা

1
objএকটি নতুন ফাঁকা বস্তু। obj[key] = item[key] মানে, প্রথম লুপ গ্রহণ, কী "নাম", তাই obj[key]হতে হবে {Name: }এবং item.Nameহয় Praveenতাই ফল কী হবে, {Name: "Praveen" }
Adrita শর্মা

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