【问题标题】:Mapping an array within an object React/Javascript在对象 React/Javascript 中映射数组
【发布时间】:2021-01-30 09:35:58
【问题描述】:

我很难使用地图功能。这就是我所做的......我将数据作为道具从我的父组件传递到子组件。 {open, high, low, close, time } 是包含 1,445 个数据集的数组,因此每个道具的内容都包含大量数据。我将使用所有 5 个数组的数据,因此我将它们存储在 conglomerate 对象中。

请将您的注意力转移到const chartRender 如您所见,我做的不对。由于我将 {open, high, low, close, and time} 存储在 conglomerate 对象中,所以当我执行 .map 方法时,它只呈现 5 个数组,可能是因为 conglomerate 数组中有 5 个数组。

function QuoteChart(props) {
    const classes = useStyles();
    const { open, high, low, close, time } = props;
    const conglomerate = [open, high, low, close, time];
    console.log(conglomerate);

    const chartRender = conglomerate.map((options) => ({
        x: new Date(options[4]),
        y: [options[3], options[1], options[2], options[0]],
    }));
    console.log(chartRender)};

目标是将数据存储在conglomerate 中,然后将{open, high, low, close, time} 中每个数组内的1,445 个数据集映射到映射函数

附加上下文:当我console.log(conglomerate) 我想将conglomerate 对象中的每个数组分配给chartRender 函数时,会出现以下内容。

正如你所看到的,当我console.log(chartRender) 时,这就是出现的情况,有些东西坏了。如果你们能帮帮我,我真的很高兴。

【问题讨论】:

  • 我无法理解您想要的行为。 conglomerate.map 将返回一个数组。你希望那个数组是什么?
  • 我不完全确定您要使用地图功能获取哪些数据。由于您只是将 5 个数组放在一个较大的数组中,因此您有一个包含 5 个数组作为元素的数组。 map 函数中的 options 参数在映射到子数组时引用其中一个子数组。
  • 因为 conglomerate 包含我需要的数组的各个元素。我想创建一个映射函数并在映射函数中分配每个较小的数组。基本上,假设在企业集团中我想映射存储在 options[0] 中的“开放”数组,那么我将如何处理这个 l?同样在那之后我想映射存储在选项[1]等中的“关闭”数组。实际上我需要访问大数组中的较小数组,因为我需要它们的数据用于映射函数

标签: javascript arrays reactjs rest ecmascript-6


【解决方案1】:

如果您打算连接存储在conglomerate 中的数组并在将它们返回给chartRender 之前对其进行操作,这应该会有所帮助。

const chartRender = conglomerate.reduce((accumulator, nestedArray) => {
  // do some operation on nestedArray
  const newArray = nestedArray.map(value => ({ x: value, y: value/2 }))
  accumulator = accumulator.concat(newArray);
  return accumulator;
}, []);

【讨论】:

    【解决方案2】:

    如果您需要将它们分开,您可以使用两次 map:

    conglomerate.map((array)=>{  //this iterates through the 5 arrays in conglomerate
      return array.map((options)=>{ //this iterates through the data in the arrays
        return {
          x: new Date(options),
          y: [options, options[1], options[2], options[0]],
        }
      })
     })
    

    如果您不需要将它们分开并且只想要一个包含所有数据的大数组,您可以在开始时将它们连接起来然后映射:

    const conglomerate = [...open, ...high, ...low, ...close, ...time];
    

    【讨论】:

    • 啊,我明白了。我认为有一个误解。我将数组的输出格式化为x: new Date(options[4]), y: [options[3], options[1], options[2], options[0]] 是有原因的,我需要为图表呈现特定格式的数据。我会在const config = { series: [ {data: [chartRender]}]} 中调用chartRender 希望会发生什么,我会调用chartRender,它会映射给定的数据。我正在为图表执行此操作,数据集的格式需要为x: new Date(options[4]), y: [options[3], options[1], options[2], options[0]]
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-04-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-10
    • 1970-01-01
    • 2020-06-17
    相关资源
    最近更新 更多