მონაცემთა ნაკრები ობიექტების მასივში Javascript/Typescript-ში
მე მაქვს ორი მასივის შემავალი ობიექტი
payload
columns:["col1" , "col2","col3"],
data: ["col1value1","col2value1" , "col1value3"] ,
["col1value2","col2value2" , "col1value2"]
ახლა მინდა ვაქციო ეს ორი ობიექტების მასივი შემდეგი შედეგის მსგავსად output=[];
[
{ col1: 'col1value1', col2: 'col2value1', col3: col1value3},
{ col1: 'col1value2', col2: 'col2value2', col3: col1value2}
]
ვცდილობ reduce ან სხვა მეთოდების გამოყენებას -- მაგრამ ვერ ვახერხებ - საჭიროა მონაცემების მასივში სვეტის ინდექსის ხელით კოდირება. არის რაიმე უკეთესი და სწრაფი გზა? სადაც ეს გაკეთებული იქნებოდა სვეტების სახელების ხელით კოდირების გარეშე.
ამჟამად ვაკეთებ როგორც
const indexofCol1= this.payload.columns.indexOf["col1"]
მერე გამოიყენეთ ის ინდექსი data მასივში იმისთვის, რომ ყველაფერი მიიღოთ — რაც კარგი გზა არასდროსაა.
პასუხი #1
შეგიძლიათ გამოიყენოთ .map() და Object.fromEntries() კომბინაცია. რადგან გსურთ თქვენი data მასივების ობიექტებად გადაკეთება, შეგიძლიათ თავდაპირველად გამოძახოთ მასზე .map(). თითოეული შიდა მასივისთვის (ნიშნულად row) შეგიძლიათ შექმნათ ობიექტი Object.fromEntries() გამოყენებით. fromEntries() მეთოდი იღებს [[key, value], ...] წყვილების მასივს, რომელსაც შეგიძლიათ შექმნათ თქვენი cols მასივის გამორთმევით, სადაც თითოეული გასაღები არის მნიშვნელობა cols-დან, ხოლო თითოეული მნიშვნელობა არის შესაბამისი ელემენტი მიმდინარე row მასივში.
გთხოვთ იხილოთ ქვემოთ მოცემული მაგალითი:
const cols = ["col1" , "col2","col3"];
const data = [["col1value1","col2value1" , "col1value3"], ["col1value2","col2value2" , "col1value2"]];
const res = data.map(row => Object.fromEntries(
cols.map((key, i) => [key, row[i]])
));
console.log(res);.as-console-wrapper { max-height: 100% !important;} /* ignore */ თუ თქვენ ვერ შეამჩნევთ Object.fromEntries(), შეგიძლიათ გამოიყენოთ უფრო ბრაუზერ-მეგობრული ვერსია ზემოთ ხსენებული, რომელიც იყენებს Object.assign() და გავრცელების სინტაქსს:
const cols = ["col1" , "col2","col3"];
const data = [["col1value1","col2value1" , "col1value3"], ["col1value2","col2value2" , "col1value2"]];
const res = data.map(row => Object.assign({},
...cols.map((key, i) => ({[key]: row[i]}))
));
console.log(res);.as-console-wrapper { max-height: 100% !important;} /* ignore */