मैं उन वस्तुओं को समूहबद्ध करने का प्रयास कर रहा हूं जिनके पास समान संपत्ति है। मैं वस्तुओं की एक सरणी से शुरू कर रहा हूं, और मैं एक सरणी के साथ समाप्त करना चाहता हूं जिसमें एक ही संपत्ति साझा करने वाली वस्तुओं के साथ कई सरणी शामिल हैं।

मान लें कि मेरे पास फिल्म ऑब्जेक्ट्स की यह सरणी है, उन सभी के पास एक वर्ष की संपत्ति है, और मैं सभी फिल्मों को एक ही वर्ष की संपत्ति के साथ अपने स्वयं के सरणी में समूहित करना चाहता हूं और अंत में उन सभी सरणी को एक सरणी में रखना चाहता हूं।

// This is the array I've got
const films = [
  {
    name='film 1',
    year='1992'
  },
  {
    name='film 2',
    year='1992'
  },
  {
    name='film 3',
    year='1995'
  },
  {
    name='film 4',
    year='1995'
  },
  {
    name='film 5',
    year='1995'
  },
  {
    name='film 6',
    year='1998'
  },
  {
    name='film 7',
    year='1998'
  },
]

// And this is the array I want to end up with
const filmsSorted = [
  [
    {
      name='film 1',
      year='1992'
    },
    {
      name='film 2',
      year='1992'
    },
  ]
  [
    {
      name='film 3',
      year='1995'
    },
    {
      name='film 4',
      year='1995'
    },
    {
      name='film 5',
      year='1995'
    },
  ]
  [
    {
      name='film 6',
      year='1998'
    },
    {
      name='film 7',
      year='1998'
    },
  ]
]

ध्यान रखें कि मेरे पास पहले से year संपत्ति नहीं है और मुझे मूल सरणी में प्राप्त होने वाले किसी भी वर्ष के साथ गतिशील रूप से निपटना होगा।

जबकि यहाँ पर सरणियों को छाँटने और फ़िल्टर करने के बारे में बहुत सारे प्रश्न हैं, मुझे इस विशिष्ट समस्या का उत्तर नहीं मिला। मैंने reduce() और filter() और उनके संयोजन का उपयोग करने की कोशिश की, लेकिन मुझे इसके चारों ओर अपना सिर नहीं मिल रहा है। मुझे कुछ संभावित समाधान मिल गए हैं (इसे किसी वस्तु में बदलना और वापस एक सरणी में बदलना) लेकिन जो मैं वास्तव में पसंद करूंगा वह कुछ अलग तरीकों को देखना है जिससे मुझे इसके बारे में बेहतर तरीके से समझने में मदद मिल सके।

0
Syknapse 27 अक्टूबर 2019, 13:34

2 जवाब

सबसे बढ़िया उत्तर

बस एक हैश तालिका और समूह year लें और हैश तालिका से मान लें।

बोनस: एक क्रमबद्ध परिणाम, क्योंकि वस्तु की कुंजियों को क्रमबद्ध किया जाता है, यदि कुंजियों को किसी सरणी के सूचकांक के रूप में पढ़ा जा सकता है।

var films = [{ name: 'film 1', year: '1992' }, { name: 'film 2', year: '1992' }, { name: 'film 3', year: '1995' }, { name: 'film 4', year: '1995' }, { name: 'film 5', year: '1995' }, { name: 'film 6', year: '1998' }, { name: 'film 7', year: '1998' }],
    grouped = Object.values(
        films.reduce((r, o) => {
            (r[o.year] = r[o.year] || []).push(o);
            return r;
        }, {})
    );

console.log(grouped);
.as-console-wrapper { max-height: 100% !important; top: 0; }
2
Nina Scholz 27 अक्टूबर 2019, 10:49

मुझे ऐसा करने का एक और तरीका मिल गया है, अगर यह भविष्य के पाठकों के लिए उपयोगी है तो मैं इसे यहां छोड़ दूंगा।

const films = [{ name: 'film 1', year: '1992' }, { name: 'film 2', year: '1992' }, { name: 'film 3', year: '1995' }, { name: 'film 4', year: '1995' }, { name: 'film 5', year: '1995' }, { name: 'film 6', year: '1998' }, { name: 'film 7', year: '1998' }]
let filmsSorted = []
let years = {}

films.forEach(film => {
    if (!years[film.year]) years[film.year] = []
    years[film.year].push(film)
})

filmsSorted = Object.values(years)

यह एक अंतरिम वस्तु बनाता है, जिसमें सामान्य गुणों (वर्षों) के कुंजी/मूल्य जोड़े होते हैं और इस संपत्ति वाले सभी वस्तुओं के सरणी होते हैं। तब हम केवल मानों की एक सरणी बना सकते हैं और हम आवश्यक छँटाई के साथ समाप्त होते हैं।

0
Syknapse 4 नवम्बर 2019, 10:16