计算和删除JSON数据

时间:2017-12-17 16:45:43

标签: javascript json reactjs frontend

我很困惑如何计算我拥有的数据json。我有数据json “id”:“001”,“item”:“samsung”,“quantity”:2,“price”:300美元。首先,我想计算小计=数量*价格。这很有效。但我不知道如何计算总数。有人可以帮忙吗? 这是持有数据json的js

export function DataBarang () {
        return  [{
                "id" : "001",
                "item" : "samsung",
                "quantity" : 1,
                "price" : 300,

            },
            {
                "id" : "002",
                "item" : "iphone",
                "quantity" : 2,
                "price" : 450,

            }];
    }

并且这是显示数据的表

import React, { Component } from 'react';
import { DataBarang } from './Barang';

class cart extends Component{
constructor(props) {
    super(props)
    this.state = {
        json: []
    }
}

componentDidMount() {
    this.setState((prevState) => {
        return {
            json: DataBarang()
        }
    })
}
render (){
    return (

        <table id="cart" className="table table-hover table-condensed">
                        <thead>
                            <tr>
                                <th styles="width:50%" className="text-center">Item</th>
                                <th styles="width:10%" className="text-center">Price</th>
                                <th styles="width:8%" className="text-center">Quantity</th>
                                <th styles="width:22%" className="text-center">Subtotal</th>
                                <th styles="width:10%" className="text-center">Action</th>
                            </tr>
                        </thead>
                        <tbody>
                        {this.state.json.map((data, i) => {
                            var subtotal = data.price*data.quantity;
                            var total = total+subtotal;
                        return (
                            <tr key={i}>
                                <td data-th="Product">
                                    <div className="row">
                                        <img src={} alt="..." className="img-responsive"/>
                                        <div className="col-sm-10">
                                            <h4 className="nomargin">{data.item}</h4>

                                        </div>
                                    </div>
                                </td>
                                <td data-th="Price">Rp.{data.price}</td>
                                <td data-th="Quantity">
                                    <input type="number" className="form-control" value={data.quantity}/>
                                </td>
                                <td data-th="Subtotal" className="text-center">Rp.{subtotal}</td>
                                <td className="actions" data-th="">
                                    <button className="button is-danger"><i className="fa fa-trash-o"></i></button>                             
                                </td>
                            </tr>);
                        })}  
                        </tbody>
                        <tfoot>


                            <tr>
                                <td><Link to ="/" className="button is-warning"><i className="fa fa-angle-left"></i> Lanjut Berbelanja</Link></td>
                                <td colspan="2" className="hidden-xs"></td>
                                <td className="hidden-xs text-center"><strong>Total Rp. {}</strong></td>
                                <td><a href="#" className="button is-success">Checkout <i className="fa fa-angle-right"></i></a></td>
                            </tr>)

                        </tfoot>
                    </table>

    );

}
}

export default cart;

并告诉我如何使用按钮()onClick

删除数据

1 个答案:

答案 0 :(得分:1)

如果您只想总结一下quantity * price收到的整个JSON,那么您可以单独计算。

const json = [{
    "id" : "001",
    "item" : "samsung",
    "quantity" : 1,
    "price" : 300,

},
{
    "id" : "002",
    "item" : "iphone",
    "quantity" : 2,
    "price" : 450,

}];

const total = json.map(({quantity, price}) => quantity * price)
                  .reduce((a, b) => a + b)
console.log(total)

为了处理删除,请创建一个新函数,该函数接受使用filter的元素的id将其从this.state.json中删除。这是一个准系统的例子。

handleDelete(id) {
  const filteredJSON = this.state.json.filter(item => {
    return item.id !== id
  })
  this.setState({json: filteredJSON})
}

render() {
  return (
<div>
    {this.state.json.map((data, i) => {
      const id = data.id
      return (
        <div>
          {data.item}
          <button onClick={() => this.handleDelete(id)}>
            {'delete'}
          </button>
        </div>
      )
    })}
</div>
  )
}