如何在javascript中过滤数据

如何在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: 

我正在做一个本地项目

在这方面,我从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: "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
,因此我更新了答案。