ফিল্টারিংয়ের পরে অ্যারেগুলিকে একটি অ্যারেতে মার্জ করুন


14

আমি অবজেক্টের অ্যারে পেয়েছি, যেখানে আমি কেবল অবস্থানগুলি অ্যারে নিই। আমার লক্ষ্য হ'ল এই অবস্থানগুলি অ্যারেটিকে এক অ্যারেতে মার্জ করা, তবে আমি এটি করতে ব্যর্থ হয়ে খালি অ্যারে পাচ্ছি। আমি এটি এইভাবে করি:

let results = [{
    id: '1',
    locations: ['aaaa', 'bbbbbb', 'cccccc']
  },
  {
    id: '2',
    locations: []
  },
  {
    id: '3',
    locations: ['ddd', 'aaadsad', 'sefd']
  },
  {
    id: '4',
    locations: ['ffff', 'eeee', 'sfdsfsd']
  },
];
const locationIds = [].concat.apply([], ...results.filter(s => s.locations && s.locations.length > 0).map(({
  locations
}) => ({
  locations
})));

console.log(locationIds);

আমি এখানে কি ভুল করছি? ফলাফল হওয়া উচিত ['aaaa', 'bbbbbb', 'cccccc', 'ddd', 'aaadsad', 'sefd', 'ffff', 'eeee', 'sfdsfsd'];

উত্তর:


9

তোমার filterএখানে দরকার নেই অ্যারেতে প্রতিটি আইটেমের জন্য প্রয়োগ করা কলব্যাক সরবরাহিত ফাংশনটি mapপাস করে কেবল পদ্ধতিটি ব্যবহার করুন।

let results = [{ id: '1', locations: ['aaaa', 'bbbbbb', 'cccccc'] }, { id: '2', locations: [] }, { id: '3', locations: ['ddd', 'aaadsad', 'sefd'] }, { id: '4', locations: ['ffff', 'eeee', 'sfdsfsd'] }, ];

const locationIds = [].concat(...results.map(s => s.locations));

console.log(locationIds);


1
@ ব্যবহারকারী 122222, আপনাকে স্বাগতম! আপনি flatMapএখানে নিজের মতো নিজস্ব বাস্তবায়ন তৈরি করতে পারেন : স্ট্যাকওভারফ্লো.com
মিহাই আলেকজান্দ্রু-আয়নুত

7

আপনি এটি দিয়ে চেষ্টা করতে পারেন flatMap():

flatMap()পদ্ধতি প্রথম একটি ম্যাপিং ফাংশন ব্যবহার করে প্রতিটি উপাদান মানচিত্র, তারপর নতুন অ্যারের মধ্যে ফলাফলের চ্যাপ্টা। এটি গভীরতা 1 এর map()অনুসরণের মতো , তবে প্রায়শই বেশ কার্যকর, কারণ উভয়কে একটি পদ্ধতিতে মার্জ করা কিছুটা দক্ষ slightlyflat()flatMap()

let results = [{
    id: '1',
    locations: ['aaaa', 'bbbbbb', 'cccccc']
  },
  {
    id: '2',
    locations: []
  },
  {
    id: '3',
    locations: ['ddd', 'aaadsad', 'sefd']
  },
  {
    id: '4',
    locations: ['ffff', 'eeee', 'sfdsfsd']
  },
];
const locationIds = results.flatMap(i => i.locations);
console.log(locationIds);


6

আপনি Array#flatMapপছন্দসই সম্পত্তি সহ একটি টাকা নিতে পারেন । সম্পত্তিটি যদি না দেওয়া থাকে তবে একটি ডিফল্ট অ্যারে যুক্ত করুন || []

let results = [{ id: '1', locations: ['aaaa', 'bbbbbb', 'cccccc'] }, { id: '2', locations: [] }, { id: '3', locations: ['ddd', 'aaadsad', 'sefd'] }, { id: '4', locations: ['ffff', 'eeee', 'sfdsfsd'] }],
    locationIds = results.flatMap(({ locations }) => locations);

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


2
এটি উল্লেখ করা ভাল f
জিডনার

3

অ্যারে.প্রোটোটাইপ থেকে হ্রাস ফাংশনটি ব্যবহার করেও সমাধান করতে পারে ।

var newResults = results.reduce(function(acc, curr) {
    return acc.concat(curr.locations)
  },[]
)

আশাকরি এটা সাহায্য করবে


2

আমি আমার নিজের সমাধান পোস্ট না করার জন্য এটিতে দীর্ঘ সময় ব্যয় করেছি - আমার জন্য আকর্ষণীয় ধাঁধা, যদিও অন্য উত্তরগুলি আরও পারফরম্যান্স এবং পাঠযোগ্য doubt এটি আপনার মূল পোস্টের মতো একই ধরণের কৌশল ব্যবহার করে, এটি কোথায় ভুল হয়েছে তা চিহ্নিত করতে সহায়তা করতে পারে।

const locationIds = [].concat
                    .apply([], results.filter(result => 
                    result.locations && result.locations.length > 0)
                    .map(result => { return result.locations }));
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.