arrays - 将 2 个数组合并为 1 个数组并过滤这个合并的数组,
问题描述
所以我有 2 个对象数组:计划的,积压的。
const planned = [
{
order_number: "1",
part_name: "example",
part_number: "1",
process_id: 1
},
....
];
const backlog = [
{
order_number: "2",
part_name: "example",
part_number: "2",
process_id: 2
},
....
];
我试图同时过滤它们,每一个都不是问题。
所以我实际上在做的是首先将计划的键添加到计划的数组和积压到积压数组,以便以后知道订单最初来自哪里。
var newPlanned = planned.map(function (el) {
var o = Object.assign({}, el);
o.planned = true;
return o;
});
var newBacklog = backlog.map(function (el) {
var o = Object.assign({}, el);
o.backlog = true;
return o;
});
后来我将 2 个数组合并为 1 个数组,并用一个输入 onChange 过滤合并的数组,但我无法实现的是与新的合并数组分开渲染“计划”和“积压”数组。
const newPlannedAndBacklog = [...newBacklog, ...newPlanned];
链接代码沙盒:沙 盒
解决方案
我为几种类型添加了一个type
而不是布尔属性。这可能更具可扩展性,因此您可以添加更多类型(refined、done 等),但如果您想要布尔属性,请告诉我。
const combinedList = [
...planned.map((item) => ({ ...item, type: 'planned' })),
...backlog.map((item) => ({ ...item, type: 'backlog' })),
];
const getFilteredList = (type) => combinedList.filter((item) => item.type === type);
更新
我相信这是你想要的行为。如果没有,请告诉我,我会更新答案。
// Combines all backlog and planned stories into one array
const newPlannedAndBacklog = [
...planned.map((item) => ({ ...item, type: 'planned' })),
...backlog.map((item) => ({ ...item, type: 'backlog' })),
];
// Filters property values based on input value
const getFilteredList = (filter) => newPlannedAndBacklog
.filter(item => Object
.values(item)
.map(String)
.some(v => v.includes(filter))
);
export default function App() {
const [form, setForm] = useState({});
const [stories, setStories] = useState([]);
const handleChange = (event) => {
const { name, value } = event.target;
setForm({ [name]: value });
setStories(getFilteredList(value));
};
// Separates the return of getfilteredList based on type
const renderDiv = (type) => stories
.filter((story) => story.type === type)
.map((story) => {
// Render each property individually:
return Object.entries(story).map(([key, value]) => {
const content = <>{key}: {value}</>;
if (key === 'order_number') return <h3>{content}</h3>;
return <p>{content}</p>;
});
});
return (
<div className="App">
<h2>PlannedAndBacklog</h2>
<p>Search for planned and backlog:</p>
<input
name='type'
onChange={handleChange}
value={form.type || ''}
/>
<div>{renderDiv('backlog')}</div>
<div>{renderDiv('planned')}</div>
</div>
);
};
推荐阅读
- mysql - 使用带有“multi = True”参数的execute()函数创建“表不存在”
- powerbi - 删除参与计算的切片器
- python - 如何使用树数据结构制作 django 模型?
- python - 熊猫单场比赛加入
- docker - 带有 docker 的 Nvidia Jetson Nano
- sql - SQL 函数在某些情况下会出错,为什么?
- ios - 保证并行后的打印顺序
- spring-boot - 我正在尝试使用带有gradle的spring boot加载jsp,但我只收到内部服务器错误
- json - IONIC API 未定义
- django - nginx/django 文件下载权限