javascript - 一个JS的算法,求大神解答
学习ing
学习ing 2017-06-28 09:26:45
0
5
805
有如下一个数组 
  [
    {"id": 100006, "value": "40,1666"},
    {"id": 100017, "value": "112,113"},
  ]
期望输出如下结果
  ['10006:40,100017:112',
   '10006:40,100017:113',
   '10006:1666,100017:112',
   '10006:1666,100017:113',
  ]
    
亦或者输入三个或者N个数组
[
  {"id": 100006, "value": "40,1666"},
  {"id": 100017, "value": "112,113"},
  {"id": 100018, "value": "1,2"},
]
能够输出
['10006:40,100017:112',
 '10006:40,100017:113',
 '10006:40,100018:1',
 '10006:40,100018:2',
 '10006:1666,100017:112',
 '10006:1666,100017:113',
 '10006:1666,100018:1',
 '10006:1666,100018:2',
 '100017:112,100018:1',
 '100017:112,100018:2',
 '100017:113,100018:1',
 '100017:113,100018:2',
]

请问怎么实现这个函数?

附加:最好不论输入数组长度都能正确的输出相应的值(是所有数组的里的值都会被匹配一次),有些答案是固定取值0,1的,期望不要这样。

学习ing
学习ing

全部回复(5)
小葫芦

雷雷

A

雷雷

屏幕截图

某草草

核心就是:
第一层遍历数组
第二层遍历对象属性

伊谢尔伦

雷雷

淡淡烟草味

试了一下仿“纯函数式”的代码:

两两相配(这是答主想要的效果):

function transform(list) {
  return list.map(i =>
    i.value
    .split(',')
    .map(j => `${i.id}:${j}`)
  ).reduce((acc, current, i, arr) => {
    current.forEach(L => {
      arr
      .filter((_, k) => k > i)
      .forEach(j => {
        j.forEach(R => {
          acc.push(`${L},${R}`)
        })
      })
    })
    return acc
  }, [])
}

另外,附加上NN相配:

function transform(list) {
  return list.map(i =>
    i.value
    .split(',')
    .map(j => `${i.id}:${j}`)
  ).reduce((l, r) => (
    l.length === 0 ?
    r :
    l.map(g =>
      r.map(j =>
        `${g},${j}`
      )
    )
    .reduce((l, r) =>
      l.concat(r), []
    )
  ), [])
}
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板