CoffeeScript每次交互都会向结果数组添加几个对象

时间:2017-05-25 09:08:02

标签: arrays reactjs coffeescript

需要像这样做:

for word, index in text_array
    React.DOM.span 
      key: index, 
      word
    ' '

但在这种情况下,CoffeeScript只将最后一个对象''推送到结果数组中,但我需要结果数组看起来像[Object,'',Object,'']

1 个答案:

答案 0 :(得分:0)

你在这里尝试做的基本上是一张平面地图&#34 ;;从概念上讲,它是这样的:

  • 给出结果数组
  • 迭代源数组
  • 每次迭代,将N值推入结果数组

你可以这样一步一步地完成:

results = []
source.forEach (word, idx) ->
  results.push React.DOM({key: index}, word), ''

您还可以使用下划线中的Array#flatten,它结合了嵌套数组true参数意味着"仅展平一个级别",此处不需要它,但它确实更具体地传达意图。

_ = require 'underscore'
results = _.flatten (source.map (word, idx) ->
  [React.DOM.span({key: index}, word), '' ]
), true

任何一个都可以被重写以使用列表理解,尽管只有第二个使用了返回值:

results =[]
for word, index in source
  results.push React.DOM.span({key: index}, word), ''

results = _.flatten (for word, index in source
  [React.DOM.span({key: index}, word), '' ]
), true

您也可以使用Array#reduce,但我不认为coffeescript列表推导支持这一点。

results = source.reduce (memo, word, index) ->
  memo.push React.DOM({key: index, word), ''
  memo
, []