javascript - ReactJS 对象过滤器在 componentDidMount 上未定义
问题描述
我用来map
进入:data
componentDidMount
componentDidMount() {
const DistrictOptions = Data.DistrictData.map((obj) => ({
key: obj.id,
text: obj.name,
value: obj.id,
cid: obj.cid
}));
console.log(DistrictOptions); // return data successfully
}
它成功返回数据,现在我想对这个对象做一个过滤器,我特雷德:
const DistrictOptions = Data.DistrictData.filter(x => x.cid === 1).map((v, i) => {
return {
key: i,
value: v.id,
text: v.name
}
});
但是这个返回空数组[]
我也试过这个:
const opt = DistrictOptions.find(x => x.cid === 1);
但是这个返回undefined
,混淆了这里发生的事情和我做错了什么。这是Data.DistrictData
:
const Data = {
DistrictData: [{
"id": "1",
"name": "ss 1",
"cid": "1"
}, {
"id": "2",
"name": "ss 2",
"cid": "1"
}, {
"id": "3",
"name": "ss 3",
"cid": "1"
}
]
}
解决方案
您可以使用==
比较器进行比较cid
,如图所示或使用===
运算符并将您的转换cid
为数字:
使用 ==
const DistrictOptions = Data.DistrictData.filter(x => x.cid == 1).map((v, i) => {
return {
key: i,
value: v.id,
text: v.name
}
});
使用 ===
const DistrictOptions = Data.DistrictData.filter(x => Number(x.cid, 10) == 1).map((v, i) => {
return {
key: i,
value: v.id,
text: v.name
}
});
您还可以parseInt(x.cid,10)
用于转换为整数。
推荐阅读
- jenkins - Jenkins - 如何在 v2.110 W10 之后设置工作区根目录
- r - 如何以编程方式更改传递给“填充”的列名?
- node.js - mongodb nodejs发现toarray没有显示嵌套对象结果
- oracle - PL/SQL 记录和表变量已更改
- php - 48)地址已在使用:AH00072:make_sock:无法绑定到地址[::]:80
- python - 在较长列表的每个第 n 个元素处将两个不同长度的列表组合成元组
- c# - Unity Android C++ DllNotFoundException
- visual-studio-code - 在不同端口上使用 VS Code 调试 2 个 nodemon 实例
- sql - 仅在满足某些条件时才尝试强制转换列
- r - 在 data.table 的区间内按日期选择行