我正在研究React本机项目。
那样,我从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 数据带入某个return数组,我需要将每个数据索引显示到平面列表中。 但是,在这里我迷惑了如何将其放入另一个数组,因为每个索引的键结尾处的Return键具有1,3,5等。
const ValuesData = [];
if (ReturnsData) {
ReturnsData.map((item, index) => {
ValuesData.push({
`${ReturnsData[index].Return`${index}`}`,
});
});
}
有人可以建议我如何将Return(1,3,5,10)数据放入数组吗?
答案 0 :(得分:1)
将startWith
与getOwnPropertyNames
或Object.keys( your_object )
一起使用。
var apiData = [{
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",
}]
/* All values of each key thats starts with "Return" in flat array */
const valuesFlat = []
apiData.map( (it, idx) =>
Object.getOwnPropertyNames(it).filter( prop => prop.startsWith("Return") )
.map( name => apiData[idx][name] )
.forEach( its => valuesFlat.push(its) )
)
console.log( "Flat values" )
console.log( valuesFlat )
/* All values of each key thats starts with "Return", not flat array */
const values = apiData.map( (it, idx) =>
Object.getOwnPropertyNames(it).filter( prop => prop.startsWith("Return") )
.map( name => apiData[idx][name] )
)
console.log("Values")
console.log(values)
const indexes = apiData.map( (it, idx) =>
Object.getOwnPropertyNames(it)
.map( (prop, idxs) => { if(prop.startsWith("Return")) return idxs} )
.filter( prop => prop != undefined )
)
console.log("indexes")
console.log( indexes )
const indexesFlat = []
apiData.forEach( (it, idx) =>
Object.getOwnPropertyNames(it)
.map( (prop, idxs) => { if(prop.startsWith("Return")) return idxs} )
.filter( prop => prop != undefined )
.forEach( it => indexesFlat.push(it) )
)
console.log("Flat indexes")
console.log( indexesFlat )
const 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("Flat props with values")
console.log( flatPropsWithValues )
Log.d(TAG,“ runON” + Thread.currentThread()。getName());
答案 1 :(得分:0)
使用正则表达式匹配和循环:
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。
答案 2 :(得分:0)
返回键Return1
,Return3
,Return5
,Return10
的值的数组:
const ReturnsData = {
Value: "900",
Return: "4",
Return1: "0.10",
Return3: "0.40",
Return5: "0.70",
Return10: "0.90",
StartDate: "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);
console.log(ValuesData);
答案 3 :(得分:0)
假设:
我假设您的密钥始终像Return, Return1, Return3, Return5 and Return10
,并且您的数据已经存储在数组(名为ReturnsData
)中。在这种情况下,您可以执行以下操作:
var ValuesData = [];
if (ReturnsData) {
ValuesData = ReturnsData.map((item) => {
return { item.Return, item.Return1, item.Return3, item.Return5, item.Return10 };
});
}
说明:
map
函数默认返回一个新数组。这就是为什么我们可以将新数组直接存储在ValuesData
中的原因。在map函数内部,我们遍历您的对象。然后,item.YOUR_KEY
可以访问每个对象的元素。最后,我们将返回一个新对象。然后正在处理下一个对象。
答案 4 :(得分:0)
以下应该可以工作:
const ValuesData = [];
if (ReturnsData) {
ReturnsData.map((item, index) => {
ValuesData.push({
ReturnsData[index][`Return${index}`],
});
});
}
答案 5 :(得分:0)
首先,我认为您最好使用forEach而不是map,因为您不是不在将该语句分配给新数组,也不在函数体内返回任何内容。在forEach中,您可以遍历每个键并进行正则表达式测试,以查看键是否以“ Return”开头。如果是这样,则将与该键关联的值推入ValuesData数组。
library(dplyr)
library(tibble)
library(purrr)
tibble(x = list(c("47", "39", "1"), c("11","11"), c("1","2"))) %>%
mutate(Sum = map_dbl(x, function(i)sum(as.numeric(i))))
#> # A tibble: 3 x 2
#> x Sum
#> <list> <dbl>
#> 1 <chr [3]> 87
#> 2 <chr [2]> 22
#> 3 <chr [2]> 3
哪个会给您结果?
let ValuesData = []
ReturnsData.forEach(item => {
let reg = new RegExp(/^Return.*/)
for (key in item) {
if (reg.test(key)) {
ValuesData.push(item[key]);
}
}
})
这与回车后的数字无关。因此,您可以使用Return12,Return1345,Return76524等,仍然可以获得所需的结果。