javascript - कॉलम में लंबवत सरणी को कैसे मैप करें?




(2)

अगर मेरे पास वस्तुओं की एक सरणी है, जैसे कि,

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);

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

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

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


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

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));


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

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/





javascript