2017-08-26 66 views
-1

我必须将相似的数字组合到一个数组中。例如:Javascript - 相同的数字组合并将其存储在state.item中

var original_Order_Items=[1,1,2,3,3]; 

这是我的原始数组。但我必须分裂这个阵列像

Order_Items_1= [ 1, 1 ]; 
Order_Items_2 = [ 2 ]; 
Order_Items_3 = [ 3, 3 ]; 

并将其保存在3 this.state.item。任何人都可以帮助我解决这个问题。

e.preventDefault(); 
    var item = this.state.item; 
    var lines = item.order_items; 

    var lines = item.order_items.reduce((p, c) => { 
      const key = `Order_Items_${c.split_number}`; 
      p[key] = p[key] || []; 
      p[key].push(c) 
      this.setState({ item: item }) 
      this.props.create(this.state.item); 
      return p; 
     }, {}); 

能够用上面的代码分开order_items。现在,我想根据const key = Order_Items_${c.split_number}创建一个单独的状态;

我试着用this.setState({item:item})this.props.create(this.state.item);为所有常见的const key创建一个common state.item = Order_Items_${c.split_number};

+0

什么问题?有什么不行吗? – Andy

+0

是的,结果不正确。请找到正在使用的更新代码。预期的结果是:Order_Items_1 = [1,1]; Order_Items_2 = [2]; Order_Items_3 = [3,3];取而代之的是:Order_Items_1 = [1]; Order_Items_2 = [2]; Order_Items_3 = [3]; – Karthikeyan

+0

你是什么意思的“并将其保存在3 this.state.item”?你能提供一个你希望最终状态看起来像什么的例子吗? –

回答

0

获取该输出的一种简单方法是使用reduce来迭代数组,并使用这些属性键名称创建一个对象。这有一个好处,就是你不会创建很多单独的变量。

var result = original_Order_Items.reduce((p, c) => { 
    const key = `Order_Items_${c}`; 
    p[key] = p[key] || []; 
    p[key].push(c) 
    return p; 
}, {}); 

结果

{ 
    "Order_Items_1": [1, 1], 
    "Order_Items_2": [2], 
    "Order_Items_3": [3, 3] 
} 

然后你就可以访问值正常:

result.Order_Items_1 // [1,1] 

DEMO

+0

谢谢......你能告诉我如何为每个项目设置状态。像“this.setState({item:item})”一样。想要将它作为mongo文档中的单独项目存储。 – Karthikeyan

+0

“const key ='Order_Items _ $ {c}';” ---->给它Order_items_ [对象对象] – Karthikeyan

+0

''Order_Items _ $ {c}'应该有反引号。看我的演示。这是一个模板文字。替代方法是'const key =“Order_Items_”+ c;' – Andy

相关问题