我如何遍历对象的属性

时间:2019-06-03 19:53:34

标签: reactjs express mongoose mongoose-schema

我创建了一个通用数据表,该数据表接收一个对象(客户,产品,旅行等)。我有一个具有属性mexican_currency_value的TravelsModel对象。这个值用猫鼬定义为:

var travelSchema = new mongoose.Schema({
        name: String,
        description: String,
        mexican_currency_value: mongoose.Schema.Types.Decimal128
    });

我还有一个函数可以返回包含所有已存储行程的列表:

function getTravels(req, res) {

    if (req.params.id) {
        TravelModel.findById( String(req.params.id) , (err, value) => {
            if ( err ) {
                return res.status(500).send({
                    message: messageError
                })
            }
            return res.status(200).send({
                results: value
            });
        });
    } else {
        TravelModel.find((err, value) => {
            if (err) {
                return res.status(500).send({
                    message: messageError
                })
            }
            return res.status(200).send({
                results: value
            });
        });
    }
}

此函数返回具有此结构的多个行程:

  description: "Primer Viaje"
  mexican_currency_value: {$numberDecimal: "18.5"}
  name: "Viaje 1"
  __v: 0
  _id: "5cf56b04462a865264fabb9d"

我的数据表或多或少是这样的:

            <DataTable plain>
                <TableHeader>
                    <TableRow>
                        {tableColumnHeader.map(element => (
                            <TableColumn key={element.id}>{element.text}</TableColumn>
                        ))}
                        <TableColumn key="actions">Acciones</TableColumn>
                    </TableRow>
                </TableHeader>
                <TableBody>
                    {tableRow.map((element, idx) => (
                        <TableRow key={idx}>
                            <TableColumn>{tableColumnHeader.map( columns => ( 
                                <div key={element[columns.id]}>{element[columns.id]}</div>
                            ))}</TableColumn>
                            <ActionsMenu id={element._id} onDelete={onDelete} onUpdate={onUpdate} />
                        </TableRow>
                    ))}
                </TableBody>
                <TableFooter />
            </DataTable>

我收到此错误:

Objects are not valid as a React child (found: object with keys {$numberDecimal}). If you meant to render a collection of children, use an array instead.

这是因为旅行对象无法访问元素[columns.id],所以我不得不做element ['mexican_currency_value'] ['$ NumberDecimal']

是否可以执行类似element [columns.id] .value的操作?还是修改以猫鼬返回数据的方式?

1 个答案:

答案 0 :(得分:0)

  

我收到此错误:   该错误的原因是您尝试呈现一个对象,而不是呈现字符串或React组件。

     

有什么办法可以做诸如element [columns.id] .value

是的,您只需检查即可

typeof (element[columns.id]) === 'object' ? ((element[columns.id])).values().map(v => v) : (element[columns.id])

但是我不认为这是个好主意。

  

还是修改以猫鼬返回数据的方式?

为简单起见,我认为最好的方法是始终为该键生成数字。