कॉलम में वर्टिकल वर्टिकल कैसे मैप करें?


15

यदि मेरे पास मदों की एक सरणी है, जैसे कि,

const array = [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18 ]

मैं इसे कैसे मैप कर सकता हूं, ताकि स्क्रीन / पेज रेंडर हो जाए,

1     6     11    16
2     7     12    17
3     8     13    18
4     9     14
5     10    15

मैं इसे काम की तरह क्षैतिज रूप से प्राप्त करने में सक्षम था,

    const chunkSize = 5;

    array
      .map((e, i) => {
        return i % chunkSize === 0 ?
           selected.slice(i, i + chunkSize)
         : null;
      })
      .filter(e => e);

लेकिन मैं इसे लंबवत काम करने में असमर्थ हूं। मैं यह कैसे कर सकता हूँ?

संपादित करें:

एक अन्य उत्तर से सुझाए गए समाधान से सबरेज़ निकलता है, जो कि मैंने इस प्रश्न में नहीं पूछा था।

जवाबों:


3

यहाँ अभी भी एक कॉम्पैक्ट लेकिन पठनीय संस्करण है।

const columnize = (items, rows) => {
  const toColumns = (table, item, iteration) => {
    let row = iteration % rows;

    table[row] = table[row] || [];
    table[row].push(item);

    return table;
  };

  return items.reduce(toColumns, []);
};

जिसका उपयोग निम्नानुसार किया जाएगा:

const numbers = [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18 ];

console.log(columnize(numbers, 5));

https://jsfiddle.net/69fshprq/

यहां सवाल पूछने के लिए इसे आउटपुट करने का एक तरीका है। मैं रिक्ति पर सख्त ध्यान नहीं दे रहा हूं, मैं इसे एक स्ट्रिंग पैडिंग फ़ंक्शन या कार्यान्वयन के लिए छोड़ दूँगा।

const numbers = [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18 ]

// <pre id="out"></pre>
let out = document.getElementById('out')
let list = columnize(numbers, 5)

for (var column in list) {
    var item = list[column]
    var line = item.reduce((line, item) => line + item + '    ', '')

    out.textContent += line + ' \n'
}

https://jsfiddle.net/t60rfcpe/


11

आप पंक्ति के लिए सूचकांक की गणना कर सकते हैं।

var array = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18],
    chunk = 5,
    result = array.reduce((r, v, i) => {
        (r[i % chunk] = r[i % chunk] || []).push(v);
        return r;
    }, []);
    

result.forEach(a => console.log(...a));


इतना तेज। इसे स्वीकार करने में मुझे थोड़ा समय लगा, लेकिन मैंने पाया कि आप तेज़ थे ..
— वी

6

const array = [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18 ]
const chunkSize = 5;

let result = [];
for (let i = 0; i < chunkSize; i++) {
    result[i] = [];
}

array.forEach((e,i) => {
    result[i % chunkSize].push(e);
});

console.log(result); 
/* 
Result : 
[ [ 1, 6, 11, 16 ],
  [ 2, 7, 12, 17 ],
  [ 3, 8, 13, 18 ],
  [ 4, 9, 14 ],
  [ 5, 10, 15 ] ]
*/


आप पाश के लिए की जरूरत नहीं है। मुझे लगता है कि आप इसे कुंजी सेट करने के लिए उपयोग करते हैं? आप बिल्कुल वही सिद्धांत foreach में एक मापांक के साथ केवल एक छोटे से complexer कर रहे हैं,
— मार्टिन
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.