Javascript 在reactjs中将项目映射并展平为单个数组

Javascript 在reactjs中将项目映射并展平为单个数组,javascript,reactjs,Javascript,Reactjs,目前,我有一个reactjs函数,它只需查询一个PockDB文档,获取7条记录,然后我尝试将这些记录展平,以便存储在状态中。问题是,现在当我使用console.logdoccarries时,我得到以下信息: (7) [{…}, {…}, {…}, {…}, {…}, {…}, {…}] 0: {caloriesBurned: "5345", createdAt: "2020-03-28T05:15:24.369Z"} 1: {caloriesBurned: "1234", created

目前,我有一个reactjs函数,它只需查询一个PockDB文档,获取7条记录,然后我尝试将这些记录展平,以便存储在状态中。问题是,现在当我使用console.log
doccarries
时,我得到以下信息:

(7) [{…}, {…}, {…}, {…}, {…}, {…}, {…}]
  0: {caloriesBurned: "5345", createdAt: "2020-03-28T05:15:24.369Z"}
  1: {caloriesBurned: "1234", createdAt: "2020-03-28T10:39:16.901Z"} 
  2: {caloriesBurned: "1122", createdAt: "2020-03-28T10:32:03.100Z"}
  3: {caloriesBurned: "1234", createdAt: "2020-03-28T05:16:54.846Z"}
  4: {caloriesBurned: "1234", createdAt: "2020-03-28T10:21:31.092Z"}
  5: {caloriesBurned: "1234", createdAt: "2020-03-28T05:08:00.791Z"}
  6: {caloriesBurned: "1234", createdAt: "2020-03-28T05:07:35.940Z"}
  length: 7__proto__: Array(0)
但我想得到这样的东西:

map: [5345,1234,1122,1234,1234,1234,1234]
所以基本上一个物体包含了每个doc燃烧热量值的7个数字

我在这里做错了什么?我如何才能正确地将它们放入一个数组/对象中

      setMax = () => {
    this.state.caloriesDB.db.find({
      selector: {
        $and: [
          {_id: {"$gte": null}},
          {caloriesBurned: {$exists: true}},
          {createdAt: {$exists: true}}
        ]
      },
      fields: ['caloriesBurned', 'createdAt'],
      sort: [{'_id':'desc'}],
      limit: 7
    }).then(result => {

      const newDocs = result.docs;
      const docCalories = newDocs.map((caloriesBurned) => caloriesBurned)

      console.log('this is map');
      console.log(docCalories);

    }).catch((err) =>{
      console.log(err);
    });
  }

您将在map函数中返回整个对象,而应该只发送
卡路里燃烧
属性

const docCalories = newDocs.map((data) => data.caloriesBurned)
或者如果你愿意,我们可以销毁数据

const docCalories = newDocs.map(({caloriesBurned}) => caloriesBurned)

杜波卡斯在评论中所写的是正确的

newDocs
是一个对象列表,使用此代码:

const docCalories = newDocs.map((caloriesBurned) => caloriesBurned)
您将得到另一个类似于
newDocs
的列表。您希望从map函数返回的是一个特定的键,因此请尝试:

const docCalories = newDocs.map(doc => doc.caloriesBurned)

考虑到通过创建地图,m2中的
doccarries
值,您可以这样做-

const m2 = new Map(Object.entries([{
        0: {
            caloriesBurned: "5345",
            createdAt: "2020-03-28T05:15:24.369Z"
        }
    },
    {
        1: {
            caloriesBurned: "1234",
            createdAt: "2020-03-28T10:39:16.901Z"
        }
    },
    {
        2: {
            caloriesBurned: "1122",
            createdAt: "2020-03-28T10:32:03.100Z"
        }
    },
    {
        3: {
            caloriesBurned: "1234",
            createdAt: "2020-03-28T05:16:54.846Z"
        }
    },
    {
        4: {
            caloriesBurned: "1234",
            createdAt: "2020-03-28T10:21:31.092Z"
        }
    },
    {
        5: {
            caloriesBurned: "1234",
            createdAt: "2020-03-28T05:08:00.791Z"
        }
    },
    {
        6: {
            caloriesBurned: "1234",
            createdAt: "2020-03-28T05:07:35.940Z"
        }
    }
]))
var store = [];

Array.from(m2).map(([key, value]) => store.push(value[key].caloriesBurned));
console.log(store);

const result=data.map(x=>+x.caroriesburned)
因此,她的问题是
doccarries
包含字符串数组而不是数字数组?@Dupocas您的结果在我的控制台中给出了我想要的结果,但由于某种原因,在我执行
this.setState({maxcarries:doccarries})之后
当我用
数据:[53451234112212341234412341234]替换文件中的一行时,
数据:[this.maxcarries]
我现在得到一个结果,你的结果给出了我在控制台中想要的结果,但由于某种原因,在我这样做之后。当我替换文件数据中的一行时,[534512341122411234112341234441234]设置状态({maxcarries:doccarries})有了数据:[this.maxcarries]我现在明白了,我不明白你想说什么。你可以再问一个问题,我会尽力帮你的。那太好了,谢谢你。在这儿