【问题标题】:How can I create an array with key value and set new state?如何创建具有键值的数组并设置新状态?
【发布时间】:2019-12-12 07:16:48
【问题描述】:

我有一个values 状态。这是一个空数组。

在 componentDidMount 上,我从 API 获取值,此操作使用这样的数组设置新状态:

 [
   435235324: { data: ... },
   456565767: { data: ... }
 ]

每个数字都是一个 id。

我在每个 id 中都有新数据的 websocket,所以我需要更新数组项的数据值。

我的搜索功能是:

const setNewValueToState = (id, data) => {
    const exist = widgetValues[id];
    console.log(exist)
    if(!exist){
      setWidgetValues(oldValues => [...oldValues, oldValues.id = data ])
    }
  } 

我需要检查 id 是否存在于数组中,如果不存在,则“push it”。

但它不起作用。它返回一个像这样的无限数组:

[
 { data: ... },
 { data: ... }
]

没有键的数组:/

【问题讨论】:

  • 你能解决这个问题吗? [id1: {}, id2: {}] 不是有效的数据结构。它可以是[{}, {}]{id1: {}, id2: {}}
  • 根据你上面的语法,我想你的意思是说新状态是设置一个 object,而不是一个数组:{ 435235324: { data: ... }, 456565767: { data: ... } }

标签: javascript arrays reactjs react-hooks


【解决方案1】:
 [
   435235324: { data: ... },
   456565767: { data: ... }
 ]

不是一个有效的数组结构,正如其他 cmets 所说,你应该使用对象数组

[ 
   { 
      "id":123456,
      "data":{ 
         ....
      }
   },
   { 
      "id":1234567,
      "data":{ 
         ....
      }
   },
]

或者使用一个对象

{
     123:{
         data:{}
     },
     1234:{
         data:{}
     },

}

【讨论】:

  • 很高兴它有帮助!继续黑客攻击!
【解决方案2】:

假设您的状态如下所示:

[{id: '123', data: ...}]

不是有效的数据结构:

[123: {data ...}]

let data = [{
  id: 993,
  data: 'foo'
}, {
  id: 123,
  data: 'bar'
}];

let idToSearch = 123;

for (let i = 0; i < data.length; i++) {
  if (data[i].id = idToSearch) {
    // found it, it's data[i]
    console.log('Found:', data[i]);
    break; // exit the loop!
  }
}

或者我倾向于避免的新热点,因为我通常使用非常大的数据集并且每个 ms 都很重要(为每个索引调用回调)。但在大多数环境中,小型或中型阵列完全没问题:

const found = data.find(item => item.id === idToSearch);

【讨论】:

【解决方案3】:

同意@Drusto 的回答。数组结构不正确。应该是

var oldObj = {
    435235324: {},
   456565767: {}
};

终于可以做到了

var newObj = {...oldObj, 435235324:{yourKey: "yourVal"}}

还有你的 setWidgetValues 我需要看看。

【讨论】:

  • setWidgetValues 它是一个 Hook setState 方法来设置它
猜你喜欢
  • 2021-09-13
  • 2010-11-11
  • 2021-01-07
  • 2021-12-27
  • 2012-08-08
  • 2019-02-26
  • 1970-01-01
  • 1970-01-01
  • 2017-12-07
相关资源
最近更新 更多