反应中的过滤和数组映射问题
Filtering and array mapping issue in react
这是对原始问题的翻译,抱歉是英文
我正在为我正在处理的应用程序的通知创建一个过滤器,该应用程序正在做出反应,事情是这样的,我正在尝试使用过滤器和地图,但出于某种原因,我认为这可能是我的一些语法错误,它没有执行过滤部分,在我收到的数据中有一个名为状态的值,如果完成我希望它从新数组中删除。
状态位于notifications.data.status下面我把接收数据的方式放上
notifications.data
它只做映射,我必须使用Object.keys,因为其余的它给我一个编译错误,非常感谢
<GlobalNotifications id="GlobalNotifications">
{/* {console.log(Object.keys(notifications.data).filter(notification => notification.status !== 'completed'))} */}
{console.log(Object.values(notifications.data))}
{Object.keys(notifications.data)
.filter(notification => notification.status !== 'completed')
.map(key => (
<NotificationItem
id={key}
key={key}
data={notifications.data[key]}
openHistory={openHistory === key}
callbackOpenHistory={onOpenHistory}
/>
))}
</GlobalNotifications>
我建议删除 rxjs 标签,因为你的问题与 JavaScript 数组上的高阶函数有关,但与 rxjs
无关
你的 notifications.data 已经是一个数组,所以你不需要使用 Object.keys() 来 return 一个数组。
filteredArray = data
.filter((notification) => notification.status === "accepted")
然后根据每个项目映射 returned 过滤数组(我使用 'accepted' 因为它提供了更多可玩的元素)。
.map((item) => { 你代码的括号和 return(确保 return 你的 jsx 在这些括号内)})
做列表的时候最好用一个唯一的key,所以我选择用你的item._id做key。下面的示例数据和代码后跟输出
import "./styles.css";
let data = [
{
status: "completed",
events: [],
_id: 1
},
{
status: "accepted",
events: [],
_id: 2
},
{
status: "accepted",
events: [],
_id: 3
},
{
status: "accepted",
events: [],
_id: 4
},
{
status: "accepted",
events: [],
_id: 5
},
{
status: "accepted",
events: [],
_id: 6
},
{
status: "accepted",
events: [],
_id: 7
},
{
status: "accepted",
events: [],
_id: 8
},
{
status: "accepted",
events: [],
_id: 9
},
{
status: "accepted",
events: [],
_id: 10
}
];
const filteredArray = data
.filter((notification) => notification.status === "accepted")
.map((item) => {
let key = item._id;
return (
<div key={key}>
id: {key}; status: {item.status}
</div>
);
});
输出:
编号:2;状态:已接受
编号:3;状态:已接受
编号:4;状态:已接受
编号:5;状态:已接受
编号:6;状态:已接受
编号:7;状态:已接受
编号:8;状态:已接受
编号:9;状态:已接受
编号:10;状态:已接受
这是对原始问题的翻译,抱歉是英文
我正在为我正在处理的应用程序的通知创建一个过滤器,该应用程序正在做出反应,事情是这样的,我正在尝试使用过滤器和地图,但出于某种原因,我认为这可能是我的一些语法错误,它没有执行过滤部分,在我收到的数据中有一个名为状态的值,如果完成我希望它从新数组中删除。
状态位于notifications.data.status下面我把接收数据的方式放上
notifications.data
它只做映射,我必须使用Object.keys,因为其余的它给我一个编译错误,非常感谢
<GlobalNotifications id="GlobalNotifications">
{/* {console.log(Object.keys(notifications.data).filter(notification => notification.status !== 'completed'))} */}
{console.log(Object.values(notifications.data))}
{Object.keys(notifications.data)
.filter(notification => notification.status !== 'completed')
.map(key => (
<NotificationItem
id={key}
key={key}
data={notifications.data[key]}
openHistory={openHistory === key}
callbackOpenHistory={onOpenHistory}
/>
))}
</GlobalNotifications>
我建议删除 rxjs 标签,因为你的问题与 JavaScript 数组上的高阶函数有关,但与 rxjs
无关你的 notifications.data 已经是一个数组,所以你不需要使用 Object.keys() 来 return 一个数组。
filteredArray = data
.filter((notification) => notification.status === "accepted")
然后根据每个项目映射 returned 过滤数组(我使用 'accepted' 因为它提供了更多可玩的元素)。 .map((item) => { 你代码的括号和 return(确保 return 你的 jsx 在这些括号内)})
做列表的时候最好用一个唯一的key,所以我选择用你的item._id做key。下面的示例数据和代码后跟输出
import "./styles.css";
let data = [
{
status: "completed",
events: [],
_id: 1
},
{
status: "accepted",
events: [],
_id: 2
},
{
status: "accepted",
events: [],
_id: 3
},
{
status: "accepted",
events: [],
_id: 4
},
{
status: "accepted",
events: [],
_id: 5
},
{
status: "accepted",
events: [],
_id: 6
},
{
status: "accepted",
events: [],
_id: 7
},
{
status: "accepted",
events: [],
_id: 8
},
{
status: "accepted",
events: [],
_id: 9
},
{
status: "accepted",
events: [],
_id: 10
}
];
const filteredArray = data
.filter((notification) => notification.status === "accepted")
.map((item) => {
let key = item._id;
return (
<div key={key}>
id: {key}; status: {item.status}
</div>
);
});
输出:
编号:2;状态:已接受
编号:3;状态:已接受
编号:4;状态:已接受
编号:5;状态:已接受
编号:6;状态:已接受
编号:7;状态:已接受
编号:8;状态:已接受
编号:9;状态:已接受
编号:10;状态:已接受