当前位置: 首页 > 知识库问答 >
问题:

如何在react中遍历数据并将值赋给状态数组

罗波鸿
2023-03-14

我有一个类组件,它的状态包含一个 filterItems[] 空白数组。我需要填充过滤器项目数组中的值

所以,我有一个来自API的数据,看起来像这样:

0:
emp_code: "a001"
company_code: "company_a"
keys: ["id", "post" ] 
dtypes: ["str", "int"]

1:
emp_code: "b001"
company_code: "company_b"
keys: ["sal", "name" ] 
dtypes: ["int", "str"]

//so on for other companies and employees

所以,像这样,我有一些员工。现在我必须循环这个api数据,提取信息并将其存储到另一个名为“过滤器”的数组中,然后将其传递给函数。

我的过滤器数组应该看起来像这样:

filters: [
        {
          key_name: "id",
          company_code: "company_a",
          input_type: "text",
          dtype: "str"
        },
        {
          key_name: "post",
          company_code: "company_a",
          input_type: "text",
          dtype: "int"
        },
//... keys for other company
]

本质上,我需要做以下反应

for each emp_code
  for each company_code
     for each key:
         keys[i]== filters.key_name
         company_code== filters.company_code
//...so on

这里的问题是,每个公司都有一组键,所以如果员工属于同一家公司,那么我不需要再次添加到过滤器数组中。所以,我基本上需要检查唯一的company_code,并将公司拥有的不同类型的键添加到过滤器数组中。

共有2个答案

邬浩涆
2023-03-14

假设您的数据是一个数组。

    let filters = [];

    data.forEach(item => {
        item.keys.forEach(key => {
            item.dtypes.forEach(dtype => {
                const filter = {
                    key_name: key,
                    company_code: item.company_code,
                    input_type: "text",
                    dtype: dtype
                };
                filters.push(filter)
            })
        })
    });
长孙哲
2023-03-14

如果我没理解错的话,您希望像这样过滤您的数据:

假设您将 API 数据存储在名为 myArr 的变量中

创建一个名为updatedArr的新变量,它将映射到myArr

const updatedArr = myArr.map((company, compIndex, compArr) => {
    return company.keys.map((key, keyIndex, keyArr) => {
        return {
            key_name: key,
            company_code: company.company_code,
            input_type: "text",
            dtype: company.dtypes[keyIndex]
        }
    })
}).reduce((acc, cur) => {
    return [...acc, ...cur]
}, [])

然后解析updatedArr以仅获取uniqueValue

let uniqueValues = [];
//parses out duplicates
updatedArr.forEach(function(item) {
  //i will be 0 or more if there already is an item in our array, which means the current item we are iterating over is a duplicate
  var i = uniqueValues.findIndex(
    x => x.dtype == item.dtype && x.company_code == item.company_code
  );
  if (i <= -1) {
    //if item is not yet inside uniqueValues, add it to uniueValues
    uniqueValues.push(item);
  }
});

然后使用唯一值更新组件状态

this.setState({
   filters: uniqueValues
})

还创建了一个沙盒来向您展示此工作:https://codesandbox.io/s/rendering-companies-ibs7g

 类似资料:
  • 然而,我得到的输出是不正确的,这不应该运行9次,而是只运行3次,在库存中的[公司]组中的每个IP一次。另外,列表中只有三个主机名需要分配给清单表中的每个主机。

  • 问题内容: 我有一个对快速服务器(我自己的服务器)进行反应的组件。服务器用于在上签署交易。一旦将交易包含在一个块中,就将一个对象返回给服务器。看起来像这样: 我需要将存入上述组件的状态。我已经搜索了2天,可能丢失了一些非常明显的内容。 这是服务器端代码还是客户端代码?由于与之交谈的固有时间延迟,我是否需要学习和使用异步? 任何帮助表示赞赏! 谢谢 问题答案: 要发出发布请求,您必须通过compon

  • 本文向大家介绍jquery 动态遍历select 赋值的实例,包括了jquery 动态遍历select 赋值的实例的使用技巧和注意事项,需要的朋友参考一下 获取select 选中的值: Ajax 动态为select赋值: 以上这篇jquery 动态遍历select 赋值的实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持呐喊教程。

  • 我有一个对象数组,如下所示: 我想把它添加到一个退出的对象中,其中id是该对象的一个键,如下所示:

  • 问题内容: 我正在尝试仅更新数组状态中的一个元素,但不确定如何执行此操作。 State 设定状态 如果我想更改标记的第四个元素中的键,该怎么做? 谢谢 问题答案: 重要的一点是,我们不应该直接更改状态数组,而要始终在新数组中进行更改,然后使用setState更新状态值。 如 Doc 建议: 切勿直接更改this.state,将this.state视为不可变。 更新状态数组的基本流程是: 1- 首先

  • 问题内容: 我有一个php页面,可从其中获取json中的响应: 我想循环它,并将每个追加到div。 这是我尝试的: 该警报为,响应为json数组。 请帮忙。 问题答案: 您的数组具有存储对象 使用的默认键(0,1):