मैं अभी हाईलैंड.जेएस और नोड में धाराओं के साथ शुरुआत कर रहा हूं और मैं कुछ संख्याओं के न्यूनतम/अधिकतम/माध्य की गणना करने की कोशिश कर रहा हूं। अभी तक मेरे पास इतना ही है:

const _ = require('highland');

const input = [
 { val: 1 },
 { val: 2 },
 { val: 3 },
];

_(input)
  .reduce((acc, { val }) => {
    if (typeof acc.min === 'undefined' || val < acc.min) {
      acc.min = val;
    }
    if (typeof acc.max === 'undefined' || val > acc.max) {
      acc.max = val;
    }
    acc.count = (acc.count || 0) + 1;
    acc.sum = (acc.sum || 0) + val;
    return acc;
  }, {});

अगर मैं करता हूं, तो कहें, toCallback और console.log जो परिणाम मुझे मिलता है {min: 1, max: 3, count: 3, sum: 6} लेकिन मुझे गिनती और योग फ़ील्ड में कोई दिलचस्पी नहीं है, मुझे {min: 1, max: 3, mean: 2} जैसी वस्तु चाहिए।

हालांकि, चूंकि कमी की वापसी एक वस्तु है, इसके साथ हाइलैंड कुछ भी नहीं कर सकता है - मैं केवल इसका उपभोग कर सकता हूं लेकिन मैं हाइलैंड भूमि में औसत करना चाहता हूं।

मैं यहां से कैसे जारी रख सकता हूं या उस औसत को प्राप्त करने के लिए मुझे कोड को कैसे रिफलेक्टर करना चाहिए?

0
Dan Caragea 13 फरवरी 2017, 21:32
सुनिश्चित नहीं है कि आप किस हाइलैंड संस्करण का उपयोग कर रहे हैं लेकिन आपके द्वारा पोस्ट किया गया कोड 'फ़ंक्शन f अपरिभाषित' जैसी त्रुटि फेंकता है। मैंने .reduce तर्कों की अदला-बदली की (पहले {} पास किया, और फिर एक फ़ंक्शन) और इसने काम करना शुरू कर दिया।
 – 
Antonio Narkevich
15 फरवरी 2017, 11:39
मैं 3.0.0-beta.3 का उपयोग कर रहा हूं, जो वास्तव में 2.x शाखा से कम करने के लिए तर्कों को उलट देता है।
 – 
Dan Caragea
15 फरवरी 2017, 14:58

1 उत्तर

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

आप इस तरह हाइलैंड .map विधि का उपयोग करने का प्रयास कर सकते हैं:

_(input)
	.reduce({}, (acc, {val}) => {
		if (typeof acc.min === 'undefined' || val < acc.min) {
			acc.min = val;
		}
		if (typeof acc.max === 'undefined' || val > acc.max) {
			acc.max = val;
		}
		acc.count = (acc.count || 0) + 1;
		acc.sum = (acc.sum || 0) + val;
		return acc;
	})
	.map(stats => {
		return {
			min: stats.min,
			max: stats.max,
			mean: stats.sum / stats.count
		};
	})
	.toCallback(function (err, data) {
		//Contains the data structure you need
		console.log(data);
	});
0
Antonio Narkevich 15 फरवरी 2017, 11:42
धन्यवाद, यह उत्तर काम करता है और मैं इसे स्वीकार करने जा रहा हूं। मुझे पहली बार में यह भ्रम हुआ कि reduce ने एक वस्तु लौटा दी और मैं map के बजाय एक flatMap के साथ उसका अनुसरण करने का प्रयास कर रहा था, जिससे तब एक त्रुटि हुई।
 – 
Dan Caragea
15 फरवरी 2017, 15:03
एक साइड नोट के रूप में, मैंने इसे "रनिंग मीन" फॉर्मूला के साथ समाप्त कर दिया, जिसे गिनती की आवश्यकता नहीं है: mean = (mean * (n - 1) + val) / n जहां n पुनरावृत्ति संख्या है
 – 
Dan Caragea
15 फरवरी 2017, 15:08