Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 促进将label属性附加到数组中、对象中的每个对象的最佳/最有效的方法是什么? 问题概述:_Javascript_Arrays_Reactjs - Fatal编程技术网

Javascript 促进将label属性附加到数组中、对象中的每个对象的最佳/最有效的方法是什么? 问题概述:

Javascript 促进将label属性附加到数组中、对象中的每个对象的最佳/最有效的方法是什么? 问题概述:,javascript,arrays,reactjs,Javascript,Arrays,Reactjs,我正在尝试向对象的数组属性内的值添加标签 这些对象是从Facebook的Graph API中获取的各种见解。我们提取了25个不同的指标 有3个我特别感兴趣。 我的搜索条件:name='page\u content\u activity',period='day'/'week'/'days\u 28' 以下是搜索返回的对象的示例: { 名称:'页面内容\活动', 句号:'天', 价值观:[ { 价值:23168, 结束时间:“2020-03-10T07:00:00+0000”, }, { 价值:1

我正在尝试向对象的数组属性内的值添加标签

这些对象是从Facebook的Graph API中获取的各种见解。我们提取了25个不同的指标

有3个我特别感兴趣。
我的搜索条件:
name='page\u content\u activity'
period='day'/'week'/'days\u 28'

以下是搜索返回的对象的示例:

{
名称:'页面内容\活动',
句号:'天',
价值观:[
{
价值:23168,
结束时间:“2020-03-10T07:00:00+0000”,
},
{
价值:19309,
结束时间:“2020-03-11T07:00:00+0000”,
},
],
标题:“每日新闻”,
description:“Daily:为您的页面创建的故事数(总数)”,
id:'页面id/见解/页面内容\活动/日',
}

客观的 我想在
值中添加到对象的标签是'Today'和'Dayed',给出了:

{
...
价值观:[
{
价值:23168,
结束时间:“2020-03-10T07:00:00+0000”,
标签:“今天”
},
{
价值:19309,
结束时间:“2020-03-11T07:00:00+0000”,
标签:“昨天”
},
],
...
}
我想对其他两个时间段“周”和“天28”重复此过程,并分别添加标签“本周”、“上周”和“最后28天”、“前28天”


我的解决方案:
  • 我创建了下面的嵌套数组,每个数组都带有
    句点
    first,用于搜索,并添加了两个标签的另一个数组
  • const periods=[
    [‘天’、[‘今天’、‘昨天’],
    [“本周”、“上周”],
    ['days_28',['Last 28 days','Prev 28 days'],
    ]
    
  • 以下是查找对象、附加标签,然后呈现列表项的函数:
  • constpagestats=({insights,page})=>{
    如果(!page&!insights)返回
    //这就是所讨论的功能
    常量渲染率=()=>{
    常量名称='页面内容\活动'
    让活动=[]
    periods.forEach(period=>{
    让data=insights.data.find(insights=>{
    返回insight.name==name&&insight.period==period[0]
    })
    //这里是我将标签添加到“值”数组中每个对象的位置
    data.values[0]。label=period[1][0]
    data.values[1]。label=period[1][1]
    活动推送(数据值)
    })
    //最后,我通过活动数组映射,并通过每个周期数组映射到
    //呈现显示新添加标签和相应值的列表项
    返回活动.map(期间=>{
    返回期.map(项=>renderItem(项))
    })
    }
    返回(
    {renderLabel(`${page.name}-${page.category}`)}
    {renderActivity()}
    )
    }
    
    我知道不建议使用链接
    map()
    ,但这是我想到的有效方法,而且它是一个小数据集,不会随着时间的推移变得更大


    我的问题: 我花了很长时间研究这个问题,并尝试了不同的方法来表示
    period
    变量和相应的标签。我把它们放在一个数组中,但作为对象,然后使用
    Object.entries(period.map)(…
    ),但它开始变得难看,我最终解决了这个问题

    我很想知道还有什么其他的解决办法?我想知道做这种事情的最短最有效的方法。我期待着看到你们的回应


    谢谢

    我想解决三个主要问题:

  • 最小化数据搜索
  • 删除双重映射
  • 解构数组以提高可读性
  • 第一个优化需要修改数据集。您当前的限制是您正在搜索两个单独的键。如果您可以将它们组合成一个键,则可以将您的洞察从数组转换为对象:

    insights.data={
    页面内容活动日期:{
    名称:'页面内容\活动',
    句号:'天',
    价值观:[
    {
    价值:23168,
    结束时间:“2020-03-10T07:00:00+0000”,
    },
    {
    价值:19309,
    结束时间:“2020-03-11T07:00:00+0000”,
    },
    ],
    标题:“每日新闻”,
    description:“Daily:为您的页面创建的故事数(总数)”,
    id:'297134493721424/insights/page\u content\u activity/day',
    },
    ...
    }
    
    这将允许您删除
    find
    方法。如果您多次执行此操作,您也可能会发现它稍微快一点,因为您只进行了一次循环来创建键,而不是3次来查找键

    第二个优化认识到您的
    forEach
    函数正在创建周期到对象的1:1映射。您可以将两者结合起来,而不是循环两次,一次创建对象,一次渲染对象

    第三个优化是解构数组,以便为元素指定有意义的名称

    这导致:

    const renderActivity=()=>{
    常量名称='页面内容\活动'
    返回期间.map([period,[currentLabel,priorLabel]])=>{
    让[currentValue,priorValue]=insights.data[`${name}{period}`].Value
    currentValue.label=currentLabel
    priorValue.label=priorLabel
    返回renderItem([currentValue,priorValue])
    }
    }
    
    我正在
    renderItem
    中重新创建值数组,但对于我觉得更可读的代码来说,这似乎是一个微不足道的成本。它当然可以作为
    值[]
    保存

    如果您创建了一个活动数组,因为您不确定给定的键组合是否总是有数据,那么您可以添加一个
    If
    条件,如果值不存在,则返回
    null
    。您的最终映射将