我正在尝试迭代嵌套的 for 循环。如果某个值等于某个值,我想将该对象添加到我所在状态的数组中。
this.state = {
custBehavior: [],
custService: [],
custEngagement: [],
custUsage: []
}
代码
this.props.insights.map((behavior) =>
behavior.map((items) =>
{if (items.scoreCategory === "Behavior") {
this.setState(behaviorInsight => ({
custBehavior: [...behaviorInsight.custBehavior, items]
}))
}}
)
prop 信息是下面的完整 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"
}]
感谢您的帮助,看不到我在这里缺少的内容。
最佳答案
您可以通过使用reduce
来实现它。然后,您可以通过过滤每个行为对象将每个items
添加到最终数组中。
你应该只设置一次状态,因为它是一个异步函数
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')
state
变量名称将使用计算属性设置,过滤器参数也通过函数参数给出。
关于javascript - 嵌套数组如果值相等则将对象添加到状态数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54910373/