Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/370.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 嵌套数组如果值相等,则在状态中将对象添加到数组_Javascript_Reactjs - Fatal编程技术网

Javascript 嵌套数组如果值相等,则在状态中将对象添加到数组

Javascript 嵌套数组如果值相等,则在状态中将对象添加到数组,javascript,reactjs,Javascript,Reactjs,我正在尝试遍历嵌套的for循环。如果某个值等于某个值,我想将该对象添加到我所在状态的数组中 this.state = { custBehavior: [], custService: [], custEngagement: [], custUsage: [] } 代码 道具信息是下面的完整json 如果我删除If语句并执行此操作 this.props.insights.map((behavior) => behavior.map((items) =

我正在尝试遍历嵌套的for循环。如果某个值等于某个值,我想将该对象添加到我所在状态的数组中

this.state = {
    custBehavior: [],
    custService: [],
    custEngagement: [],
    custUsage: []
  }
代码

道具信息是下面的完整json

如果我删除If语句并执行此操作

this.props.insights.map((behavior) =>
  behavior.map((items) =>
    console.log(items)
  )
);
我将获得数组中每个对象的打印输出,同样,下面是示例json

样本数据

[{
            "scoreModelId": "DNA_APPLE_HML_TAG",
            "scoreDisplayName": "Apple Enthusiast",
            "scoreCategory": "Behavior",
            "scoreSystem": "LMH",
            "scoreValue": "HIGH",
            "scoreDate": "2019-01-05",
            "scoreLevel": "L",
            "scorePriority": 1
        }, {
            "scoreModelId": "DNA_GOOGLE_HML_TAG",
            "scoreDisplayName": "Google Enthusiast",
            "scoreCategory": "Behavior",
            "scoreSystem": "LMH",
            "scoreValue": "HIGH",
            "scoreDate": "2019-01-05",
            "scoreLevel": "L",
            "scorePriority": 1
        }, {
            "scoreModelId": "MG6M_IN_A",
            "scoreDisplayName": "LTV Model",
            "scoreCategory": "Segmentation",
            "scoreSystem": "DECIMAL",
            "scoreValue": "14.06",
            "scoreDecile": "2",
            "scoreCentile": "13",
            "scoreDate": "2019-01-14",
            "scoreLevel": "L"
        }]

谢谢你的帮助,我看不出我在这里遗漏了什么。

你需要规范化数据然后更改状态吗

例如:

const normalizedData=this.props.insights.map((行为)=>
behavior.map((项目)=>
如果(items.scoreCategory==“行为”){
返回({
custBehavior:[…behaviorInsight.custBehavior,项目]
})
}
).filter(值=>value)

这个.setState({custBehavior:normalizedData})
可以通过使用来实现。然后可以通过过滤每个行为对象将每个
项添加到最终数组中

您应该只设置一次状态,因为它是一个异步函数

const custBehavior = this.props.insights.reduce(
    (acc, behavior) => [...acc, ...behavior.filter(items => items.scoreCategory === "Behavior")], //Takes out every item corresponding to the filter and adds them to the final array
    [] //The starting value, an empty array
)
this.setState({ custBehavior })
要将其应用于其他类型,可以使用上述代码生成函数:

customCategory = (category, name) => {
    const custThing = this.props.insights.reduce(
        (acc, behavior) => [...acc, ...behavior.filter(items => items.scoreCategory === category)],
        []
    )
    this.setState({ [name]: custThing })
}

//

this.customCategory('Behavior', 'custBehavior')
this.customCategory('Segmentation', 'yourStateVariableName')

状态
变量名将使用计算属性设置,并且过滤器参数也通过函数参数给出。

请不要将示例数据作为图像发布。请改用文本格式。使用示例数据更新@hindmostI表示您的post中的所有数据,即所有数据。将post中的所有图像替换为文本。谢谢!si既然我还有一些其他的对象要寻找,你可以在我的数据分割中看到另一个,这对其他数组是如何工作的?你可以看到我的状态总共有四个数组,我想这取决于你想用其他数组实现什么,在最好的情况下,你可以简单地更改
过滤器中的字符串你能发布一个输入/输出示例吗?我在上面发布了相同的json。在该示例中,有一个分段的scorecategory。我最终需要将数据放在四个特定区域。因此,如果我想在其中添加另一个类别(分段),你的代码可以与行为类别一起工作我编辑了我的答案,这就是你想要做的吗?
customCategory = (category, name) => {
    const custThing = this.props.insights.reduce(
        (acc, behavior) => [...acc, ...behavior.filter(items => items.scoreCategory === category)],
        []
    )
    this.setState({ [name]: custThing })
}

//

this.customCategory('Behavior', 'custBehavior')
this.customCategory('Segmentation', 'yourStateVariableName')