如何在javascript中过滤数据
我正在做一个本地项目 在这方面,我从api中获得了多个数据,如下所示如何在javascript中过滤数据,javascript,arrays,sorting,filter,Javascript,Arrays,Sorting,Filter,我正在做一个本地项目 在这方面,我从api中获得了多个数据,如下所示 { Value: "895" Return: "2" Return1: "0.20" Return3: "0.40" Return5: "0.60" Return10: "0.50" StartDate: "2019-06-13" }, { Value: "900" Return: "4" Return1: "0.10" Return3:
{
Value: "895"
Return: "2"
Return1: "0.20"
Return3: "0.40"
Return5: "0.60"
Return10: "0.50"
StartDate: "2019-06-13"
}, {
Value: "900"
Return: "4"
Return1: "0.10"
Return3: "0.40"
Return5: "0.70"
Return10: "0.90"
StartDate: "2019-06-14"
},
但是,我试图将所有Return数据带到某个返回数组中,我需要将每个数据索引显示到平面列表中。
但是,这里我弄不清楚如何将它放入另一个数组中,因为返回键在每个索引中的键的末尾有1,3,5等等
const ValuesData = [];
if (ReturnsData) {
ReturnsData.map((item, index) => {
ValuesData.push({
`${ReturnsData[index].Return`${index}`}`,
});
});
}
有人能建议我如何将返回(1,3,5,10)数据放入数组吗?使用正则表达式匹配和循环:
const ValueData = [];
const re = new Regex('(Return[0-9]{1,2})');
if (ReturnsData) {
for (const key in ReturnsData) {
if (if ReturnsData.hasOwnProperty(key) && re.test(key)) {
ValueData.push(ReturnsData[key]);
}
}
}
正则表达式应该匹配任何以“Return”开头并以一两个数字结尾的数据。for…in循环遍历键,检查它们是否存在于对象上,以及它们是否与正则表达式匹配。如果返回,则该键的值将添加到ValueData。返回键的值数组
Return1
,Return3
,Return5
,Return10
:
const ReturnsData={
值:“900”,
返回:“4”,
Return1:“0.10”,
Return3:“0.40”,
Return5:“0.70”,
Return10:“0.90”,
起始日期:“2019-06-14”
};
const regex=/Return(1 | 3 | 5 | 10)/;
const ValuesData=Object.entries(ReturnsData)
.filter(([k,v])=>regex.test(k))
.map([k,v])=>v);
控制台日志(ValuesData)代码>假设:
我假设您的键总是类似于Return、Return1、Return3、Return5和Return10
,并且您的数据已经存储在一个数组中(名为ReturnsData
)。在这种情况下,您可以执行以下操作:
var ValuesData = [];
if (ReturnsData) {
ValuesData = ReturnsData.map((item) => {
return { item.Return, item.Return1, item.Return3, item.Return5, item.Return10 };
});
}
说明:
默认情况下,map
函数返回一个新数组。这就是为什么我们可以将新数组直接存储在ValuesData
中。在map函数中,我们在对象上循环。然后可以通过项访问每个对象的元素。您的\u键
。最后,我们返回一个新对象。然后正在处理下一个对象 以下方法应该有效:
const ValuesData = [];
if (ReturnsData) {
ReturnsData.map((item, index) => {
ValuesData.push({
ReturnsData[index][`Return${index}`],
});
});
}
首先,我认为最好使用forEach而不是map,因为您没有将该语句分配给新数组,也没有在函数体中返回任何内容。在forEach中,您可以遍历每个键并执行regex测试,以查看该键是否以“Return”开头。如果以“Return”开头,则将与该键关联的值推送到ValuesData数组中
let ValuesData = []
ReturnsData.forEach(item => {
let reg = new RegExp(/^Return.*/)
for (key in item) {
if (reg.test(key)) {
ValuesData.push(item[key]);
}
}
})
结果如下:
["2", "0.20", "0.40", "0.60", "0.50", "4", "0.10", "0.40", "0.70", "0.90"]
无论返回后的数字是多少,这都会发生。因此,您可以使用Return12、Return1345、Return76524等,但仍然可以获得所需的结果。将startWith
与getOwnPropertyNames
或Object.keys(您的\u对象)
一起使用
var-apiData=[{
值:“895”,
返回:“2”,
Return1:“0.20”,
Return3:“0.40”,
Return5:“0.60”,
Return10:“0.50”,
起始日期:“2019-06-13”,
}, {
值:“900”,
返回:“4”,
Return1:“0.10”,
Return3:“0.40”,
Return5:“0.70”,
Return10:“0.90”,
起始日期:“2019-06-14”,
}]
/*平面数组中以“Return”开头的每个键的所有值*/
常量值平面=[]
apiData.map((it,idx)=>
Object.getOwnPropertyNames(it.filter)(prop=>prop.startsWith(“Return”))
.map(name=>apiData[idx][name])
.forEach(its=>valuesFlat.push(its))
)
console.log(“平面值”)
console.log(valuesFlat)
/*以“Return”开头的每个键的所有值,而不是平面数组*/
const values=apiData.map((it,idx)=>
Object.getOwnPropertyNames(it.filter)(prop=>prop.startsWith(“Return”))
.map(name=>apiData[idx][name])
)
console.log(“值”)
console.log(值)
const index=apiData.map((it,idx)=>
Object.getOwnPropertyNames(it)
.map((prop,idxs)=>{if(prop.startsWith(“Return”))返回idxs})
.filter(prop=>prop!=未定义)
)
console.log(“索引”)
console.log(索引)
常量索引平面=[]
apiData.forEach((it,idx)=>
Object.getOwnPropertyNames(it)
.map((prop,idxs)=>{if(prop.startsWith(“Return”))返回idxs})
.filter(prop=>prop!=未定义)
.forEach(it=>indexsflat.push(it))
)
log(“平面索引”)
console.log(indexesFlat)
常量flatPropsWithValues=[]
apiData.map((it,idx)=>
Object.getOwnPropertyNames(it)
.filter(prop=>prop.startsWith(“Return”))
.forEach(prop=>flatPropsWithValues.push({prop:prop,value:apiData[idx][prop]}))
)
console.log(“带值的平面道具”)
log(flatPropsWithValues)
您能创建一个可运行的代码段吗?了解如何创建一个Just-transform响应(猜reactjs有这个选项)到您想要返回的任何内容。对于returnX,您可以迭代键,并将所有匹配模式的键推入结果数组。我是react native新手,您可以发布任何示例吗?['Return${index}]}`-->意外的模板字符串表达式。eslint(字符串中没有模板卷曲)意外的字符串串联。eslint(首选模板)我相信还有其他更好的答案,我只是想为您修复插值字符串,这不是您想要的正确解决方案。我重新阅读了问题,您似乎只希望包含Return1
,Return3
,Return5
,Return10
,因此我更新了答案。