Javascript 在reactjs中返回包含更新数组的整个对象
我在显示包含更新的features数组的features对象时遇到问题。对于未接触/未删除的零件,其工作正常,但我删除的特征仅返回特征 数组,而不是显示包含要素数组的整个对象。我的意思是,如果我有这样一个物体Javascript 在reactjs中返回包含更新数组的整个对象,javascript,reactjs,ecmascript-6,redux,immutable.js,Javascript,Reactjs,Ecmascript 6,Redux,Immutable.js,我在显示包含更新的features数组的features对象时遇到问题。对于未接触/未删除的零件,其工作正常,但我删除的特征仅返回特征 数组,而不是显示包含要素数组的整个对象。我的意思是,如果我有这样一个物体 0: Object feature_description: "Room Amenities" feature_type: "roomamenities" features:Array(6) _id:"59395255455a5b043c764a29" 1:Object feature_
0: Object
feature_description: "Room Amenities"
feature_type: "roomamenities"
features:Array(6)
_id:"59395255455a5b043c764a29"
1:Object
feature_name: "Room Amenities"
feature_type: "bathroom"
features:Array(3)
_id:"59395255455a5b043c764a29"
现在,当我删除RoomComforesFeature类型的功能时,我得到了以下结果
0:Object
features: Array(5) # 5 not 6 because one item is deleted
1:Object
feature_name: "Room Amenities"
feature_type: "bathroom"
features:Array(3)
_id:"59395255455a5b043c764a29"
相反,它应该返回以下对象
0: Object
feature_description: "Room Amenities"
feature_type: "roomamenities"
features:Array(5)
_id:"59395255455a5b043c764a29"
1:Object
feature_name: "Room Amenities"
feature_type: "bathroom"
features:Array(3)
_id:"59395255455a5b043c764a29"
我如何解决我的问题
这是我的减速机代码
case UPDATE_REQUESTED_FEATURES_SUCCESS:
return state
.update("features", features =>
state.get('features').map(feature => {
console.log("feature", feature);
if (feature.get("feature_type") === "roomamenities") {
return {
...feature,
features: feature.get("features").map(subFeature => {
return subFeature.get("_id") !== action.response.data._id;
})
};
} else {
return feature;
}
})
);
这是由consoling state.get('features')从reducer生成的features对象的结果
您的
功能
对象是不可变的JS映射。因此,请将其替换为:
return {
...feature,
features: feature.get("features").map(subFeature => {
return subFeature.get("_id") !== action.response.data._id;
})
};
与:
请您用代码显示数据结构,而不是控制台显示的数据结构,好吗?很抱歉,我不理解您所说的数据结构。在第一部分中,您所说的是对象,但您向我们显示了
0:object[…]1:object[…]
-这似乎是一个数组而不是对象。请向我们展示JS数组或对象格式的数据结构,例如:一个对象可以显示为{id:“123”,文本:“Test”}
,一个数组可以显示为[“a1”,“a2”]
@Weedoze,因为我已经提出了我的问题。这将如何删除所选项目?我会尝试一下,并让您知道事实上还有另一件事需要纠正:您的内部.map
调用应该是.filter
。我刚刚更新了它。这一个成功了,但是我的代码不成功的原因是因为使用了扩展运算符吗?是的,扩展运算符列出了可枚举属性,而ImmatableJS没有公开它们。
return feature.set("features",
feature.get("features").filter(subFeature => {
return subFeature.get("_id") !== action.response.data._id;
})
);