Javascript,使用reduce和map

时间:2017-06-02 20:37:56

标签: javascript arrays

我正在尝试重新划分阵列。

所以拿这个数组[col1,col2,col3,col4]

我需要嵌套数组 - 所以第一个元素就像这样

[[col1],[col2,col3,col4]]

我已经尝试了以下代码 - 但它然后将col2推入第一个数组位置

jsfiddle.net/0ht35rpb/57 - 我的例子正在做什么

k['key'] = i
if (i % 2 === 0) {
 m.push([k])
} else {
 m[m.length - 1].push(k)
}
return m

我的努力:



function arrayMaker(menu) {
  var l = []
  menu.reduce((m, k, i) => {
    if (i === 0) {
      m.push([k])
    } else {
      l.push(k)
    }
    if (i === menu.length - 1) {
      m.push(l)
    }
    console.log("m", m)
    return m
  }, [])

}

var menu = ["col1", "col2", "col3", "col4"]
var nest = arrayMaker(menu)
console.log("nest", nest)




好吧伙计们 - 这是代码的全部内容 - 为什么它看起来如此复杂,如此简单。

    {
     lang.menu.reduce((m, k, i) => {
       m.push(k)
       if (i === lang.menu.length - 1) {
         m = [m.slice(0, 1), m.slice(1)]
       }
       return m
     }, []).map((grouped, index) => (
       <div key={index} className={index === 0 ? 'main-footer__left' : 'main-footer__right'}>
         {
           <div className='row grid__row--offset--30'>
             {
               grouped.map((item, j) =>
                 <div key={j} className={(index === 0 && j === 0 ? 'large-45 large-centered' : 'large-14 large-offset-5') + ' columns'}>
                   <h2 className='text--uppercase text--white footer-text'>{item.title}</h2>
                   {
                     item.switch
                       ? <p className='text--white grid__row--offset--15 footer-text'>
                         {
                           item.children.map(function (child, j) {
                             return (
                               <Link key={j} className={'text--white footer-text transition ' + (props.active_language === child.title.toString().toLowerCase() ? activeLang : alternativeLang)} to={urls[j]}>{child.title}</Link>
                             )
                           })
                         }
                       </p>
                       : item.children.map(function (child, j) {
                         return (
                           <div key={j} className={(j === 0 ? ' grid__row--offset--15' : '')}>
                             <Link className='text--white footer-text transition' to={child.link}>{child.title}</Link>
                           </div>
                         )
                       })
                   }
                 </div>
               )
             }
           </div>
         }
       </div>
      ))
    }

3 个答案:

答案 0 :(得分:2)

您可以将Array#slice与数组一起用于新数组。

var array = [1, 2, 3, 4],
    result = [array.slice(0, 1), array.slice(1)];
    
console.log(result);

答案 1 :(得分:2)

我喜欢欺骗:

var array = [1, 2, 3, 4],
   result = [[array.shift()], array];

console.log(result);

答案 2 :(得分:0)

另一个

var arr=[1,2,3,4];
var result=arr.reduce((a,e,i)=>((a[i?1:0]=a[i?1:0]||[]).push(e),a),[]);