【问题标题】:Vuex state array keysVuex 状态数组键
【发布时间】:2019-05-16 12:53:09
【问题描述】:

我初始化状态

state = {
   matches: []
}

mutations = {
   setMatches(state,payload) {
     state.matches = payload
   }
}

在我的 getter 中,我设置为获取密钥

userMatchesId:  state => {
   return [...state.matches.keys()]
}

我得到了错误

state.matches.keys is not a function

我的数据是这样的

{
  "44033":{
    "comments":[
        {
          "comment":"selected Hasan Ali was Bowler and Took a wicket",
          "playerId":9598
        },
        {
          "comment":"selected Fakhar Zaman was Fielder and Caught a catch",
          "playerId":8192
        },
        {
          "comment":"selected Adil Rashid was Bowler and Took a wicket",
          "playerId":3899
        },
        {
          "comment":"selected Ben Stokes was Fielder and Caught a catch",
          "playerId":4489
        },
        {
          "comment":"selected Ben Stokes was Fielder and Caught a catch",
          "playerId":4489
        },
        {
          "comment":"selected \"Ben Stokes\" was and Captain and awarded 2x points",
          "playerId":4489,
          "wasCaptain":true
        }
    ],
    "score":150
  },
  "44034":{
    "comments":[
        {
          "comment":"selected Babar Azam was Fielder and Caught a catch",
          "playerId":5601
        },
        {
          "comment":"selected \"Ben Stokes\" was and Captain and awarded 2x points",
          "playerId":4489,
          "wasCaptain":true
        }
    ],
    "score":10
  }
}

我需要创建 2 个数组,一个包含该数组的键,另一个包含分数。

我已经尝试使用 vue 组件中的计算属性映射返回,但我想我错过了一些东西。

我也试过

  let score;
  state.matches = [...Array.from(payload.matches).keys()];

  Array.from(payload.matches).forEach(match => {
    match.score += score
  });

  state.score = score;

我想要的结果是

matches: ["44033","44044"]
score: ["150",10]

【问题讨论】:

  • 看起来这不是 vuejs 也不是 vuex 问题。您可以编辑您的问题以向我们展示数组的外观吗?有点不清楚您要做什么。
  • @Stilleur 编辑问题以显示结果
  • 太棒了,谢谢你:)
  • 那是因为您的扩展运算符末尾有 (),它断言您的键是一种方法。不使用() 试试

标签: javascript arrays vuejs2 javascript-objects vuex


【解决方案1】:

为了做你想做的事,你必须使用 2 个函数:

  1. Object.keys() 将返回一个对象键数组 (doc)
  2. Array​.prototype​.map() 将返回您提供的函数的结果数组 (doc)

const data = {
  "44033": {
    "score": 150
  },
  "44034": {
    "score": 10
  }
}

const ids = Object.keys(data) // ["44033", "44034"]
console.log(ids)

// for each id in ids, return the data[id].score
const scores = ids.map(id => data[id].score) // [150, 10]
console.log(scores)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-04-07
    • 2021-11-23
    • 2021-06-07
    • 1970-01-01
    • 2021-06-19
    • 2020-06-08
    • 2019-04-23
    • 2020-10-22
    相关资源
    最近更新 更多